home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Archive Magazine CD 1995
/
Archive Magazine CD 1995.iso
/
text
/
hints
/
volume_2
< prev
next >
Wrap
Text File
|
1995-06-25
|
256KB
|
8,037 lines
• How to wipe a disc clean − If you want to wipe a disc completely
clean, you can use *WIPE * ~CFR<return> (Use this command with care −
there’s no going back once you’ve pressed <return>!) − in other words,
remove files with any name (*), don’t ask for confirmation of each wipe
(~C), force them (F) to be deleted even if they are locked and do it
recursively (R) so that the contents of all directories are deleted.
However, even this drastic measure won’t allow you to delete a library
directory if one exists. So do a *Lib “”<return> before the *WIPE
command.
2.1
• GammaPlot/System Delta Plus − If you have been trying to import SDP
files into GammaPlot and have been unsuccessful, read onÉ Firstly you
have to copy the System Delta Plus software onto your GammaPlot disc.
Then if it still doesn’t work, it will be because you have an older
version of System Delta Plus. Send the original SDP disc back to Minerva
and ask for an up-grade.
2.1
• Mounting problems (sic) − Do you find that sometimes it refuses to
respond to a *MOUNT command even if you take the disc out and put it
back in again? Two solutions: type *BYE and then you should find that
*CAT will cause it to access the disc OR if, like me, you’ve got *MOUNT
on a function key, just do a *MOUNT with no disc in the drive then
*MOUNT with the new disc in place. If you are in First Word Plus where
you cannot issue star commands anyway, the latter technique should do
the trick since you can achieve the equivalent of *MOUNT by clicking on
the close box (the X) in the file menu. (Just as a matter of interest,
does anyone know why it gets into this state sometimes?)
2.1
• Users of C (and other compiled languages) may find the following
command file useful, as sent in by Peter Linstead. You can put it in the
$ directory of your hard disc and use it when starting a C programming
session. Once you have assigned your current program’s name to NAME
using, for example, *SET NAME MYPROG you can edit the source file by
pressing <f1>. Once out of TWIN, <f2> will compile and link the source
code and <f3> will execute the run code. By using SETMACRO, you can
change the working name with another *SET command without running the
command file again. It assumes that both FPE and TWIN are in the
$.Library.
2.1
*| > $.Library .C
2.1
*FPE
2.1
*DIR $.ARM.BENCH
2.1
*SETMACRO ALIAS$AUTOT *TWIN
2.1
C.<NAME> |M
2.1
*SETMACRO ALIAS$AUTOC *CC <NAME>
2.1
− LINK |M
2.1
*SETMACRO ALIAS$AUTOR *RUN
2.1
P.<NAME> |M
2.1
*KEY 1 *AUTOT|M
2.1
*KEY 2 *AUTOC|M
2.1
*KEY 3 *AUTOR|M
2.1
*SET RUN$PATH ,%.,$.ARM.LIBRARY.,@.P.
2.1
*GOS
2.1
(I have just reproduced this from Peter’s hand-written letter and I
haven’t got C to try it out on, so I hope I’ve transcribed it correctly.
If it hadn’t been for the postal strike I’d have sent it to David Wild
first, so please bear with us if you find it is not completely correct.
Ed.)
2.1
• ANSI C Compiler − Mike Sherratt writesÉ “On a very fundamental noteÉ
The manual is very terse. To compile the demo programs on the distribu
tion diskette − Balls64, Sieve and Hello, heed the ReadMe file where it
says ‘RMLoad the FP emulator etc i.e. RMload fpe240’. Get to the
directory level ‘Bench’ then do:
2.1
*CC −Arthur Sieve
2.1
The spaces are significant, ‘−’ is minus. The Sieve source file is in
sub-directory ‘c’. The executable file is now in sub-directory ‘p’.
2.1
The program can be run from the star prompt by typing *Sieve. The ‘c.’
prefix is embedded (for lack of a better word) in the compiler, so don’t
try to create the prefix!! You are now on the way.
2.1
This information came thanks to Watford Elec-tronics who used Acorn’s
dealer hot-line for me.“
2.1
(Because of the postal strike, this has been inserted by the Ed rather
than sending it to David for checking, so hopefully it will be OK!?)
2.1
• Formatting from programs − If you want to write a disc copier
program, as we at Archive obviously did for copying the program discs,
you have to find some way to get round the fact that *FORMAT asks for a
keyboard confirmation. We did it by creating a file on the second drive
that consisted of just <Y> and then called that is input from the
program. Ingenious! But then we found the easy (undocumented) way of
doing it:
2.1
*FORMAT 0 D Y
2.1
Simple if you know how!
2.1
• Replacement 3.5“ disc drives − One reader had to replace his 3.5”
drive and Acorn could only offer him the official second disc drive up-
grade (which includes a new front facia which he didn’t need) so he
bought an un-cased 3.5“ drive from Matmos Ltd (1 Church Street,
Cuckfield, W.Sussex, RH17 5JZ, 0444−414484) for £59.50 + £3 carriage +
VAT. This drive was almost a direct fit and only required some judicious
filing of the button slot to complete the replacement.
2.1
• Debugging ARM code listings − It is sometimes useful for non-ARM
code specialists who want to type in ARM code program listings to have
‘wayside pointers’ as the code runs to help them debug the program and
find out where they have made typing errors. Adding the occasional SWI
&1nn (where nn is 30 to 39 for number 0 to 9) will print out these
numbers as an indication of how far the program has got. (Better still,
buy the monthly program disc!!! Ed.)
2.1
• Mannisman Tally printers with serial interface − Pin connections
are: pins 1, 4 and 6 linked together on the Archimedes, pin 3 to pin 3
on the printer, pin 5 to pin 7 on the printer and pin 8 to both pins 11
and 19 on the printer.
2.2
• SWI “XOS...” − If you are using SWI “XOS...” commands so that you
can handle your own errors, it will fail if you try to return
immediately after this command to the calling routine. A dummy instruc
tion needs to be inserted before the LDMFD instruction. Presumably a
‘feature’ of OS 1.2.
2.2
• Problems with *Memory and *MemoryI − If you try to use these two
commands in the debugger with the aim of dumping to printer, you will
find that codes above &7F are not weeded out − they are all sent to the
printer regardless which can cause all sorts of problems. The following
program patch will solve the problem.
2.2
10 REM> DEBUGPCH
2.2
20 REM (C) JW^2 4th OCTOBER 1988
2.2
30 DIM A% &270C
2.2
40 OSCLI“SAVE Debugged_D 38486A0
2.2
+270C“
2.2
50 OSCLI“LOAD Debugged_D ”+STR$~A%
2.2
60 FOR F=0 TO 3 STEP 3
2.2
70 P%=A%+&2230
2.2
80 [
2.2
90 OPT F
2.2
100 STMDB R13!,{r0-r9 ,R14}
2.2
110 .LOOP
2.2
120 LDRB R0,[R9],#1
2.2
130 CMP R0,#&7F
2.2
140 MOVHS R0,#&2E
2.2
150 CMP R0,#&1F
2.2
160 MOVLS R0,#&2E
2.2
170 SWI “XOS_WriteC”
2.2
180 BVS (LOOP+&35D)
2.2
190 SUBS R2,R2,#1
2.2
200 BNE LOOP
2.2
210 ]
2.2
220 NEXT
2.2
230 OSCLI“SAVE Debugged_D ”+STR$~A%+
2.2
“ +270C”
2.2
240 OSCLI“SETTYPE Debugged_D &FFA”
2.2
• EDIT’s disappearing cursor − If you use ‘options’ (<shift-f3>), you
can change to a non-flashing cursor which is visible all the time, and
you don’t have to change it each time you switch on the machine because
EDIT stores its options in cmos ram. (Anyone know if there’s a way to
re-program it to change the colour of the cursor?)
2.2
• Putting sound through the monitor − It is perfectly possible to put
the sound output from the 3.5mm stereo jack socket on the Archimedes
through the amplifiers and speaker(s) of both the standard Acorn colour
monitor and also the Phillips CM8833. All you need is a piece of twin
screened cable (though actually I used ordinary thin three core mains
flex which is OK for such a short length) and a 3.5 mm stereo jack plug
(RS Components 274−284, £1.19 for two). The SCART plug connections are
that pin 2 is right audio, 4 is earth and 6 is left audio. The pins
should be numbered, but if not, 2, 4 and 6 are the first three pins
along the long edge of the plug starting from the rectangular end.
2.2
Three possible problems: firstly, you may find that the SCART plug has
no pins at positions 2, 4 and 6 in which case you will have to buy a new
plug (Tandy N¼ 15−7030, £1.49 each) and re-wire the other connections.
Secondly, you may find that your cable doesn’t fit through the space
available for the cable entry in the SCART plug − in which case, some
judicious hacking of the plastic is needed. Finally, if the SCART plug
has got pins at 2, 4 and 6, you may not be able to get at them to solder
onto them. The solution here is to push each of the three pins back out
through the body of the plug, solder them then push them back in again.
It sounds easy but it’s not − there are little barbs the stop the pins
being pushed out so you have to try to manipulate these and push the
pins out at the same time − OK if you have three hands!
2.2
The result − If the kids want to play Orion at full volume, they can,
but I can turn it back down to a sensible volume when I use the system.
2.2
• Stereo Speakers − I recently followed the suggestion in Archive 1.2,
page 7 and purchased the amplified speakers (Model 40-1259E) from a
local Tandy store. Initially I also purchased a couple of mains adaptors
to power each unit but I found that this caused a considerable mains hum
through both speakers. Upon returning to the Tandy store, I was advised
that hum was caused by the mains adaptors not being earthed and, rather
than spending more money on earthed mains adaptors, I exchanged the
original adaptors for re-chargeable batteries which seem to work fine −
there are also fewer wires trailing around! Whilst the stereo effect is
very good, there is a problem in that there is no volume control fitted
to these speakers; the suggestion from one of the staff at Tandy was to
wire in two of their “L-Pad Speaker Level Controls”. Have any other
Archive readers tried this or come up with a different solution?
2.2
I have found that by amending the *Configure SoundDefault middle
parameter to a lower value than 7, the volume can be reduced, this does
provide some measure of control of sound volume; these parameters can
take a value of 0 to 7 with each unit corresponding to one eighth of the
overall maximum volume (see PRM, page 537).
2.2
• Monitor problems (with solutions!) − Fujitsu and MAG 14C − The
problem began on the MAG with a distortion of the top few lines of the
display when in a multisync mode. The nature of this problem suggested
that the monitor took several scan lines to lock onto the composite sync
signal fed to it from the Archimedes. It was decided to feed it with
separate vertical (frame) and horizontal (line) sync signals, which
necessitated having to alter the preset links 10 and 11 within the
Archimedes. At present this involves cutting a track (Lk10) and
inserting a link (Lk11), since these links are not brought out on the
normal Molex type links. Having done this modification you need a
*Configure Sync 0 to set ‘Vertical sync only’ instead of ‘Composite
sync’ to the monitor, otherwise the display rolls (indicating lost frame
sync). This then cured the screen distortion problem but because of the
way Acorn have put Composite/Vertical sync on the green signal, it kills
the green output. With much trepidation this problem was overcome by
disabling Acorn’s implementation of this signal by cutting pin 2 of IC
4. The result is a perfect picture.
2.2
The Fujitsu monitor problem was much simpler and cured far easier after
the troubles with the MAG.
2.2
Although the picture quality was very good, there was an excess of
green, even though R39 had been removed (see Archive 1.3 p8) It was
originally thought that some internal adjustment of the green gun was
needed but, with the experience of MAG monitor (and having tried it on
the modified sync signal from the green output) the link changes proved
unnecessary as the monitor worked perfectly happily with composite sync.
Again the result was a perfect picture.
2.2
Anyone wanting further information on this modi-fication can either
contact Reg Dalton on 0742 487992 (less technical/Evenings only) or
Steve Bass (who did all the work) on 0742 708028 (Daytime) or 0742
886622 (Evenings).
2.2
• Screen saving from the SCML Teletext adaptor − R L Jefferies has
worked out how to dump screens from the SCML Teletext Adaptor. (Pressing
the ‘S’ command option gives an error but SCML have not replied to his
questions about that yet.) He has utilised Robin Newman’s mode 7 to mode
9 utility as supplied on program disc 1.10. He copied this into the
library directory on the Teletext disc and then created a mode 7 to mode
9 screensave module using Neil Strong’s “Printkey screen dump” (issues
1.10 p 45 and 1.11 p 7). Two lines need altering in the source program:
2.2
line 840 should be changed to cmp r0,#83 and line 920 should be equs
“M7M9 screensave scr<file>”
2.2
Note that you should *SETEVAL file XX before you load the “S” key module
and before executing the Teletext module. One small niggle is that Robin
Newman’s module returns with the cursor ON. Is there an easy way to get
rid of this?
2.2
• Bug in C − Karl Strickland writesÉ There appears to be a bug in the
fgets() function in version 1.54A (latest public release) of ANSI C.
Instead, use the function given below and declare it using
2.2
char *xfgets (char*,int,FILE*);
2.2
We have to use xfgets (as opposed to fgets) because the linker gets
confused if it finds the same function declared twice.
2.2
char* xfgets (char* a,int b,FILE *s)
2.2
{2 .2
int c,d;
2.2
*a=NULL; /* Must include STDIO.H */
2.2
for (c=0;c<b;c++) {2 .2
d=fgetc(s);
2.2
if (d==EOF)
2.2
return NULL;
2.2
else
2.2
if (d==13)
2.2
return a;
2.2
else
2.2
strncat(a,(char*)&d,1);
2.2
}
2.2
return a;
2.2
}
2.2
• A hint for Twin from Bj¿rn Fl¿tten − When using Twin to edit large
BASIC programs you can easily run out of memory. (Twin complains by
hanging up the computer when called.) This is because of the inconveni
ent way Twin is called from BASIC. Because Twin works on ASCII files,
BASIC has to expand the current program from tokenised form to ASCII.
This copy is placed on top of the BASIC program and is maybe 20-30%
larger than the original. Then Twin is called and makes a new copy of
the program which it places on top of itself. This means that an
unnecessary lot of memory is used.
2.2
One solution is to let Twin run from the address of PAGE. This works
because Twin is not loaded into memory before the BASIC program is
expanded. However, you will have to ensure that the BASIC program is
bigger than Twin, if not, Twin will be loaded over the expanded version
of your program.
2.2
(This unfortunately makes the problem of Twin not releasing some vectors
worse. This means that these vectors will point into the middle of your
BASIC program after exiting from Twin. Use reset after exiting to BASIC
and then OLD, to cure this.)
2.2
• Problems with (Master) EDIT − If you get rubbish when you load up
the EDIT ROM image from the BBC Master into the 6502 emulator, try
loading it with:
2.2
*65arthur
2.2
*GO F800
2.2
*EDIT
2.2
• From Arthur to BASIC − If you are in the Arthur supervisor and you
type *Progname where Progname is a BASIC program, it will run the
program and drop you back out into the supervisor (equivalent to *BASIC
−chain Progname). However, if you *LOAD Progname, it switches to BASIC,
loads the program and gives you back control with a ‘>’ prompt −
equivalent to *BASIC −load Progname but shorter to type and certainly
easier than *BASIC followed by LOAD “Progname”. If you do a *SHOW, you
will see the filetype definitions which make sense of it all.
2.2
• Sprites and Sprite Commands − Paul White-horn writesÉ The Sprite
Editor on the Welcome disc does not work properly being unable to create
masked sprites (those with a transparent back-ground) or to save shades
of colour that have been set up in the various edit modes. For many
board style games this is not an insuperable difficulty and for chess
and checkers, mode 1 creates reasonably detailed sprites in red, yellow,
black and white.
2.2
The simplest way of getting your own sprites from the Welcome disc onto
your game or program disc is to *SNEW to wipe out anything that can be
called a sprite in RAM, *SLOAD (by name or number) your sprite or sprite
file into the machine from the Welcome disc (you don’t need to be in the
Sprite Editor to do this), take out the Welcome disc, insert your game
disc, *MOUNT it and *SSAVE (name) the contents of the machine’s RAM.
Whatever sprites you have in RAM at this point will all go into a file
created and named by the *SSAVE command and will be placed on your own
disc.
2.2
To check that they are all safely installed on your game disc *SNEW
again (to clear RAM) and *SLOAD (name) the sprite(s) you have just
*SSAVE’d on your disc. Now typing *SLIST will bring up a list of ALL the
sprites in RAM which should correspond to the ones you have just
transferred from the Welcome disc. At this point you can rename the
sprites you see listed before you but the syntax for the *SRENAME
command is not as it appears in the User Guide. Type *SRENAME (oldname)
(newname) without commas or other punctuation marks separating the two
names and without any quote marks round the names. This renames sprites
in RAM and if you want these new names preserved on your disc then they
must be *SSAVE’d collectively back to disc and you can save them with a
different file name if you wish.
2.2
*SDELETE (name) deletes a sprite in RAM whereas *DELETE (name) deletes a
sprite (or file of sprites) on disc. Having weeded out sprites you don’t
require with *SDELETE it is best to *SSAVE those you do need (possibly
with a new file name) and *SNEW to clear RAM before proceeding further.
This way you will not have rogue sprites lurking in RAM or in files on
your disc where they may be called by default if they have the same name
or number as the new ones.
2.2
To create files of sprites from different sources you can use *SMERGE
which merges a sprite (or file of same) from disc with those already
installed in RAM. Those coming from disc have priority so if you have
two sprites with the same name or number, the one on the disc will
overpower its namesake in RAM. This command seems a little haphazard on
my 310 especially with sprites which are numbered and occasionally
several tries are needed to make it happen as required.
2.2
If you intend to choose sprites during the course of your game as a
consequence of numerical operations then it is necessary to use numbers
as names so that they can be called with the VDU command. The VDU call
takes variables with a range between 0 and 255 so make sure your sprites
don’t exceed this range.
2.2
*SINFO prints the size of the sprite workspace and *SCOPY (oldname)
(newname) copies the named sprite. *SGET picks up a portion of the
screen as a sprite but for details of this see the User Guide.
2.2
• EMR SoundSynth + CC ROM podule − There has been a problem of a clash
between EMR’s SoundSynth and Computer Concepts’ ROM/RAM podule in that
after using SoundSynth, the contents of the RAM filing system disap
peared! (Fortunately, I had a recent backup!) EMR have been looking into
the problem and have sorted it out. If you have had the same problem,
return your disc to EMR and they will replace it “in most cases, free of
charge”.
2.2
• Loading palette files − Here is a simple BASIC program to load a
“!Palette” file and set the palette up. The file format really is
simple: 3 bytes are stored for each colour − red, green and blue
respectively. This group of 3 bytes is repeated for all 20 colours saved
− logical colours 0-15, the border, and mouse colours 1-3.
2.2
10 REM >TestPal
2.2
20 REM ===> To demonstrate reading a
2.2
30 REM ===> Desktop !Palette file
2.2
40 REM By John Smith, September 1988
2.2
50 REM
2.2
60 MODE 12 :REM Any 16-colour mode
2.2
will do.
2.2
70 :
2.2
80 REM Put all 16 colours on screen,
2.2
and a 2-colour mouse pointer.
2.2
90 FOR x%=0 TO 15
2.2
100 GCOL x%
2.2
110 RECTANGLE FILL x%*80,0,80,1023
2.2
120 NEXT
2.2
130 MOUSE ON
2.2
140 *POINTER 1
2.2
150 PRINTTAB(0,0);“Now press a key to
2.2
load the ‘!Palette’ file“
2.2
160 dummy=GET
2.2
170 :
2.2
180 REM Now load the palette file.
2.2
190 handle%=OPENIN “!Palette”
2.2
200 REM Do “standard” colours first.
2.2
210 FOR loop%=0 TO 15
2.2
220 COLOUR loop%, BGET#handle%,
2.2
BGET#handle%, BGET#handle%
2.2
230 NEXT
2.2
240 :
2.2
250 REM Screen Border
2.2
260 VDU 19,0,24, BGET#handle%,
2.2
BGET#handle%, BGET#handle%
2.2
270 :
2.2
280 REM Mouse colour 1
2.2
290 MOUSE COLOUR 1, BGET#handle%,
2.2
BGET#handle%, BGET#handle%
2.2
300 MOUSE COLOUR 2, BGET#handle%,
2.2
BGET#handle%, BGET#handle%
2.2
310 MOUSE COLOUR 3, BGET#handle%,
2.2
BGET#handle%, BGET#handle%
2.2
320 CLOSE#handle%
2.2
• InterWord to ArcWriter − if you have InterWord files from BBC days
and want to transfer them to ArcWriter, look in the First Word Plus
hints below where the transfer to FWP is achieved by transferring first
to ArcWriter.
2.2
• Double-precision to BBC BASIC − following on from the floating point
BCD to BBC BASIC conversion program published in Archive 1.11, page 32,
Carl Cepurneek has done a routine which converts from the more efficient
Double-precision reals to BBC BASIC.
2.2
10 REM>Carl - FPU number conversion
2.2
20 REM BBC BASIC V to FPU memory
2.2
30 REM format conversions
2.2
40 REM Packed decimal print routine
2.2
50
2.2
60 REM Carl P.Cepurneek 26 Clyde St
2.2
70 REM Parkside, S.A.5063,Australia
2.2
100
2.2
110 DEFPROCcvt_s(bbc,adr) :REM from
2.2
BBC real at |bbc to FP at adr
2.2
120 LOCAL exp%,sign%,mant%
2.2
130 !adr=0:adr!4=0 :REM clear
2.2
140 IF |bbc=0:!adr=0:ENDPROC
2.2
150 exp%=(bbc?4)-&80 :REM get
2.2
adjusted exponent
2.2
160 IFexp%>0 exp%=exp%+126 ELSE exp%=
2.2
126-ABS(exp%)
2.2
170 !adr=!adr OR exp%<<23:REM set
2.2
exponent bits
2.2
180 sign%=!bbc AND &80000000
2.2
:REM isolate sign bit
2.2
190 !adr=!adr OR sign%:REM set sign bit
2.2
200 mant%=!bbc AND &7FFFFFFF :REM
2.2
clear neg bit if set
2.2
210 !adr=!adr OR mant%>>>8:REM set
2.2
mantissa
2.2
220 ENDPROC
2.2
230
2.2
240 DEFPROCcvt_d(bbc,adr):REM from
2.2
real at address bbc
2.2
250 LOCAL exp%,sign%,mant%
2.2
260 !adr=0:adr!4=0
2.2
270 IF |bbc=0:!adr=0:ENDPROC
2.2
280 exp%=(bbc?4)-&80 :REM get
2.2
adjusted bbc exponent
2.2
290 IF exp%>0 exp%=exp%+1022 ELSE exp%
2.2
=1022-ABS(exp%)
2.2
300 !adr=!adr OR exp%<<20
2.2
310 sign%=!bbc AND &80000000
2.2
:REM isolate sign bit
2.2
320 !adr=!adr OR sign%:REM set sign bit
2.2
330 mant%=!bbc AND &7FFFFFFF
2.2
:REM clear sign bit set
2.2
340 !adr=!adr OR mant%>>>11 :REM set
2.2
mantissa msbits
2.2
350 mant%=mant%<<21 :REM shift over
2.2
low bits
2.2
360 adr!4=adr!4 OR mant% :REM set
2.2
mantissa lsbits
2.2
370 ENDPROC
2.2
380
2.2
390 DEFPROCcvt_e(bbc,adr):REM from
2.2
BBC real at |bbc
2.2
400 LOCAL exp%,sign%,mant%
2.2
410 !adr=0:adr!4=0:adr!8=0 :REM clear
2.2
destination
2.2
420 IF |bbc=0:!adr=0:ENDPROC
2.2
430 exp%=(bbc?4)-&80 :REM get
2.2
adjusted exponent
2.2
440 IFexp%>0 exp%=exp%+16382 ELSE
2.2
exp%=16382-ABS(exp%)
2.2
450 !adr=!adr OR exp% :REM set
2.2
exponent bits
2.2
460 sign%=!bbc AND &80000000
2.2
:REM isolate sign bit
2.2
470 !adr=!adr OR sign%:REM set sign bit
2.2
480 mant%=!bbc OR &80000000 :REM set
2.2
top bit (J)
2.2
490 adr!4=adr!4 OR mant% :REM set
2.2
mantissa
2.2
500 ENDPROC
2.2
510
2.2
520 DEFFNprint_packed(base%)
2.2
530 LOCAL ms%,ms$,es%,es$,m%,s%
2.2
540 @%=&00001
2.2
550 m%=(!base% AND &80000000)>>>31
2.2
560 IF m%=0 ms$=“+” ELSE ms$=“-”
2.2
570 PRINT ms$;
2.2
580 m%=(!base% AND &F<<8) >>>8
2.2
590 PRINT m%;“.”;
2.2
600 FOR s%=4 TO 0 STEP -4
2.2
610 m%=(!base% AND &F<<s%) >>>s%
2.2
620 PRINT m%;
2.2
630 NEXT
2.2
640 FOR w%=4 TO 8 STEP 4
2.2
650 FOR s%=28 TO 0 STEP -4
2.2
660 m%=(w%!base% AND &F<<s%) >>>s%
2.2
670 PRINT m%;
2.2
680 NEXT
2.2
690 NEXT
2.2
700 e%=(!base% AND &40000000)>>>30
2.2
710 IF e%=0 es$=“+” ELSE es$=“-”
2.2
720 PRINT“ E”;es$;
2.2
730 FOR s%=24 TO 12 STEP -4
2.2
740 m%=(!base% AND &F<<s%) >>>s%
2.2
750 PRINT m%;
2.2
760 NEXT
2.2
770 =“”
2.2
• Using 40-track drives − If you have a 40 track 5.25“ drive as used
on PC clones, you can use it under the PC emulator but, in native
Archimedes ADFS modes you will have problems. To get round it, format
the disc as normal then, when it goes beyond “Formatting 40” and starts
clicking as it reaches the end of the travel on the head movement, press
<ctrl-break>. The disc is now formatted, but the free space map and
catalogue have not been installed. This can be done with:
2.2
DIM buffer% 3072
2.2
SYS“ADFS_DiscOp”,,1,0,buffer%,3072
2.2
SYS“ADFS_DiscOp”,,2,1,buffer%,3072
2.2
You try this entirely at your own risk! Ed.
2.2
• Problems with ON ERROR LOCAL − John Smith says he thinks he’s
discovered a problem when using LOCAL ERROR with ON ERROR LOCAL. It
occurs because ON ERROR LOCAL stores the exact position in the program
structure. The User Guide mentions this with respect to REPEAT...UNTIL
and WHILE...ENDWHILE loops, but it also seems to apply to IF..THEN...
ELSE...ENDIF constructs. Once the error handler has done its job,
processing must continue at the same part in the structure in which the
original error happened. For example,
2.2
1000 DEF PROCtest(arg)
2.2
1010 LOCAL ERROR
2.2
1020 ON ERROR LOCAL PRINT “Can’t
2.2
divide by zero − try again“
2.2
1030 IF arg < 100 THEN
2.2
1040 INPUT value
2.2
1050 PRINT arg/value
2.2
1060 ENDIF
2.2
1070 ENDPROC
2.2
If a value of zero is input, line 1050 will error. As written, the above
code will then print a warning message and effectively execute a “GOTO
1030”. At this point, the error handler stack is corrupted. The program
may appear to work without problem, but if any future error should
occur, the program may produce a run-time error something like “Attempt
to exit from badly nested error handler” or something similar. Occasion
ally, I have even managed to produce the dreaded “Address Exception
error”!
2.2
The solution to this problem is quite simple − place the code that could
error together with the relevant error handler in a separate PROCedure.
I have not (yet) had any problems doing this:
2.2
1000 DEF PROCtest(arg)
2.2
1030 IF arg < 100 THEN
2.2
1050 PROCprint(arg)
2.2
1060 ENDIF
2.2
1070 ENDPROC
2.2
2000 DEF PROCprint(arg)
2.2
2010 LOCAL ERROR
2.2
2020 ON ERROR LOCAL PRINT “Can’t
2.2
divide by zero − try again“
2.2
2040 INPUT value
2.2
2050 PRINT arg/value
2.2
2060 ENDPROC
2.2
First Word Plus Hints & Tips
2.2
Here are a few of the many contributions we’ve been sent about First
Word Plus. We’ve got a file of about ten other contributions, so we do
need someone who knows FWP, has a reasonable skill at writing and has a
bit of spare time to field the enquiries, assimilate the hints and tips
and regurgitate something to us each month.
2.2
• First Word Plus startup − If you are getting fed up of starting
First Word Plus and finding yourself in lower case, you could *Configure
Nocaps, but that is a nuisance if you do programming and want to start
up in Shiftcaps. The solution is to extend the boot file, adding
*FX202,48.
2.2
• LQ850 with sheetfeeder − If you’re having problems with this
combination, Acorn say that you should edit the printer driver so that
entry 4 (vertical tab) is commented out by pre-fixing it with a “*”.
Also, note that if your printer is doing auto-linefeeds, you should also
edit option 1 to remove the line feed value (A) from the line to leave
just the carriage return (D).
2.2
• Star LC10 − (ref. the Help enquiry we had last month) David Francis
says he uses the Epson FX driver successfully with this printer. He has
the dip switches set as follows: 1-1 to 1-8 and 2-1 and 2-4 are all ON
and 2-2 and 2-3 are OFF. The Archimedes is configured to IGNORE 0. With
this setting, the printer prints out the test, including the graphics
part. As set, it also prints under <ctrl-B> as well as with Artisan.
He’s also tried to change the hex file to get it to work with quadruple
size, but hasn’t succeeded yet.
2.2
• Printer drivers − In designing my own printer drivers for both the
Citizen 120D and Star LC-10 printers, I have not come across the problem
noted, but mine were modified from the Epson LX printer driver. There
was an item on the Letters section (page 128) of October’s issue of the
Micro User referring to an apparently similar problem, which the writer
cured by “commenting out” line &20 of the printer driver. I must admit
that I cannot understand why this should have any effect, but in case it
benefits other Archive readers, I detail below those elements of the
printer drivers I have set up relating to form or line feeds (refer also
to page 227 of the First Word Plus manual):
2.2
1D, A − Linefeed (N.B. carriage return & linefeed)
2.2
1E, C − Formfeed (N.B. &C = 12 as mentioned in the article)
2.2
1F, 12 − Horizontal initialisation (N.B. appears to cancel condensed)
2.2
20, 1B, 52, 0 − Vertical initialisation (N.B. appears to select USA
characters)
2.2
A further possible cause of problems may be to do with the printer’s dip
switches, on page 218 of the First Word Plus manual it does state that:
2.2
Skip over perforation must be DISABLED and Auto linefeed must be
DISABLED
2.2
• Printer Drivers with extended characters − Ted Peat has sent in
various bits for FWP which we’ve put on the program disc.
2.2
The printer drivers were written to permit both the Panasonic KXP-1081
and the Diablo-ecs printer to access the same set of extended characters
(those with codes from 160 to 255). The character set of the Archimedes
is also modified to suit.
2.2
The Diablo-ecs printers use a daisy wheel with a double row of charac
ters, giving 192 in all. The usual ASCII set is supplemented by
characters with codes >128. The description given here applies to the
‘scientific’ wheel containing Greek and mathematical symbols. The KXP-
1081 can be switched to emulate the IBM Graphics set, which also
includes some Greek letters and some (but not all) useful mathematical
symbols, again with codes >128. There are also some table-drawing
symbols which are replicated several times over, and accented characters
not needed for this application. Since up to 40 user-defined characters
are possible, these redundant characters can be replaced. This then
offers the opportunity to produce matched sets of symbols for the two
printers and the Archimedes.
2.2
I decided to include the complete Greek alphabet, which involves
duplication of some upper case letters, and (for the KXP-1081 only), one
set of table-drawing symbols. Two other symbols were added: an overline
and backspace. Backspace is entered into the text as a large leftward
pointing arrow-head (stored as character 161), but interpreted by the
printer as a true backspace. One consequence of this, of course, is that
text loses its WYSIWYG property. The advantage, however, is that both
superscripts and subscripts can be attached to the same symbol, and the
overline can be used to write a bar above a character. Since these
peculiar needs are only likely within equations, the loss of on-screen
text formatting is a minor irritation. Another complication was that the
Diablo lost its left margin alignment after a backspace, when printing
in the reverse direction. This option had to be switched off, slowing
the printer down.
2.2
There were two options for changing the Archi-medes character set. One
was to change the Archi-medes font, to match that desired as far as
possible, and then to redefine characters for the few changes needed.
The most useful character set is that described as BFONT on p. 458 of
the User Guide. To access this you need to *Configure Country Master.
The second way: which is the one I adopted was to redefine all charac
ters from 160 to 255. To do this I added a section to the 1st Word +
loading program (Library.1stWord+ on the program disc).
2.2
Once this was done, mapping the new character set to the Diablo’s set
was easy: merely rewrite one of the provided Diablo Printer Drivers (in
the hex dir-ectory) by changing the character translation table which
forms the last part of the printer driver text.
2.2
The KXP-1081 offered more complications. Firstly, it is necessary to
download the redefined character set before loading 1stWordPlus. Another
addition to the loader program, together with a user prompt, took care
of this. Secondly, switching this printer to its IBM Graphics mode
caused comp-lications with graphics printing: all the linefeeds became
doubled! The printer driver codes were therefore expanded so that for
each character the printer was switched into IBM Graphics set, the
character printed, and then switched back to the Epson mode. This sends
seven characters to the printer for every one actually printed. Since
these are only occasional characters, the loss of efficiency is not
important
2.2
• Printer Driver Generator − John Smith has sent in, not another
printer driver, but a printer driver generator program. He’s given it to
be used as public domain software, so we have put it on Shareware disc
number 2. For best results, copy the PDG program onto a copy of the 1st
Word Plus Utilities disk before running it.
2.2
• Tabs and underlining − This one is for dum-dums like me, writes
David Crofts, who learn word-processing at the finger tip.
2.2
Underlining − I spent many happy, but frustrating, hours fiddling with
forms to try to sort out under-lining in intervening spaces, till I
discovered that the hated TAB holds the key! (I expect this is obvious
for lots of people, but hold on to the yawns.) I was used to VIEW where
the TAB key worked “prop-erly”. (It inserted a TAB character, whatever
that was, but it meant that a change in ruler meant a change in layout.)
In FWP the Indent key does this job, except that it puts in a special
stretch space which is fixed in spite of further ruler alterations.
Because of this I had ignored TAB as useless.
2.2
TAB inserts a set of normal spaces which have to be deleted individually
− a nuisance if you are experi-menting with documents. But − you can
underline TAB spaces, whereas you can’t underline Indents! And therein
lies the hint!
2.2
By all means use indents to facilitate experi-mentation but, in the end,
TABs are preferable, where you wish subsequently to underline. If you
have used Indents, then all is not lost, though fiddle is the name of
the game. Turn off Insert, and turn on Underline (f2), then fill in the
spaces with Fixed Space (f10). Then use the mouse or keyboard to
underline the words.
2.2
e.g. Say you have a form, the head of which is:
2.2
Name Address Telephone
2.2
the above is the result using Indent, but using TAB you will achieve:
2.2
NameÊÊÊÊÊÊAddressÊÊÊÊÊÊTelephoneÊÊÊÊÊ
2.2
Placing a TAB at the appropriate point near the end of the ruler allows
the line to be printed to the same length on each line.
2.2
• InterWord to FWP via ArcWriter − This is how Ian Barnes achieves the
transfer:
2.2
1. Transfer file from IW to AW_DOC directory
2.2
2. Run ArcWriter
2.2
3. Press <select> for filing menu
2.2
4. Highlight file x
2.2
5. Press <menu>, select import, flowing, return
2.2
6. Press <select> for filing menu
2.2
7. Press <menu> and select export plus new name
2.2
8. Transfer file to 1WP.doc directory
2.2
9. Run 1WP and open file
2.2
10. Select WPmode from edit menu
2.2
11. Tidy up text by deleting control characters, changing any odd
letters and inserting returns at line ends to leave a presentable result
2.2
• Files from ArcWriter − The article by Brian Carroll in July’s issue
of Archive under the heading of “First Word Plus Notes” (pages 21-23)
was very useful together with the program ConvertWP (also on that
month’s Magazine disc). Although designed to convert Wordwise Plus
files, the program works quite well with ArcWriter as well. Briefly the
procedure to convert ArcWriter files into First Word Plus is as follows:
2.2
1. From the ‘Filing’ menu in ArcWriter select the ‘Export’ option to
save the file (e.g. under the name “testARC”) and then exit from
ArcWriter.
2.2
2. Load the ConvertWP program and enter the appropriate Source
(“testARC”) and Destination (e.g. “test1WP”) filenames.
2.2
3. Load First Word Plus and then the converted file (“test1WP”).
2.2
4. Select ‘WPmode on’ from the Edit menu.
2.2
5. Reformat the whole text by using the Style menu to ‘Reformat’ the
‘Whole document’.
2.2
Odd words may sometimes get missed out of the converted text, possibly
due to the fact that this data was preceded by “tabs” in ArcWriter.
2.2
• Fontsize problems? (Ed. got caught out on this one) With Clares’
Sound and Graphics demo, when you start it up, it says it needs 44k of
fontsize, so I tried to re-configure with fontsize 6 on the basis that 6
times 8k = 48k. Now, as I’m sure you will all realise, that didn’t work
because fontsize is specified in 4k chunks, not 8k or 32k.
• Logotron printer dump − Logotron told one of our readers that there
is no printer dump for their Archimedes Logo. However, our Printkey Dump
program (issue 1.10, page 45) works fine.
• RX80 dumps for Artisan − Clares originally said that Artisan
wouldn’t dump pictures on an Epson RX-80 and that the FX-80 was the
‘base-line’ printer as far as they were concerned. How-ever, they have
since produced a ‘help-sheet’ of the pokes needed to convert the dump to
an RX-80.
2.3
The gist of the change is as follows;
2.3
If your printer will support CRT mode graphics, (ESC “*”,4) then use it.
If not then use ESC “K” for normal single density bit image mode, but
CRT mode gives a much better image and less distortion.
2.3
*LOAD ART6 10000
2.3
!&10EC5=&042A1B for CRT or =&4B1B00 for single density
2.3
*SAVE ART6 10000 +12FF
2.3
*SETTYPE ART6 &FF8
2.3
The resultant print produces oval circles(!) but can be triggered from
Artisan.
2.3
• Monochrome displays on the 440 − Brian Cowan writes, I was lucky
enough to have one of the first release of 440’s which I used with one
of the Acorn colour monitors. I know that the resolution of these
monitors is nothing fantastic, but it seemed sensible to purchase them
together; at that stage I was not sure what connection standards were
used.
2.3
About six months later I had reason to use an ordinary mono monitor on
the 440, and imagine my horror when I found it did not work. Ordinarily
I would have sent the computer back to the supplier to have it fixed
under warranty. However, the machine was in constant use so we decided
to live with it, using only a colour monitor.
2.3
I now discover that there is nothing wrong with the 440!! When these
machines leave the factory they are not configured to drive standard
resolution mono monitors, they are set up for high res monitors. Inside
the case, on the PCB are some jumpers that must be set according to what
sort of monochrome monitor you want to drive.
2.3
At the north-west corner of the board is a plug called PL2. I think this
does nothing except carry some pin connector links. A little further
southwards on the board are some pins labeled LK13 and LK14. If you want
to drive a standard resolution monochrome monitor, you must take two
links from PL2 and place one on LK13 and the other on LK14.
2.3
Connection to a monochrome monitor on 440 machines is through two BNC
sockets on the back panel. One socket is marked SYNC and the other is
labeled MONO. For high resolution, both of these are used but for
standard resolution only the SYNC socket is used. Since this is a BNC
socket rather than the phono socket on the 300 series, you will have to
make up or purchase a special lead or a converter.
2.3
For those of you contemplating the purchase of a multisync monitor for
those extra modes etc. you will be happy to hear that the Archimedes
connect-ions are the same as those on PC machines. This means that if
the monitor comes with a lead, it will probably be suitable for the
Archimedes. This is certainly true for the Taxans that I use. Inciden
tally, concerning the Taxans, some have rather dull pictures. Has anyone
tried brightening them up?
2.3
• Desktop calculator − “The calculator on my desktop doesn’t respond
to the keyboard whereas your review of Arthur 1.2 said it did.” So I
tried to work the calculator with the keyboard keys myself and it didn’t
seem to work. Then I realised that it won’t respond until you enable it
for keyboard input by clicking on it with the mouse. The top bar then
goes red and it’s ready to take input from either the main keyboard or
the numeric pad, delete being the equivalent of clear. Easy when you
know how.
2.3
• Conditional booting. If you have a boot file in the RFS on battery-
backed RAM, you may want to do some things when you first switch on but
not every time you do <ctrl-break>. You can achieve this by making it
conditional on the monotonic timer, i.e. the timer which is initialised
at switch-on and not reset in any other way. To read this timer, use SYS
&42 TO T% where T% then gives the time in centiseconds so you can say
that IF T%<200 (say) then do the switch-on bits and pieces ELSE do the
<ctrl-break> things.
2.3
• CharDes fonts − If you have fonts produced by CharDes, you can
convert them for use on the Archimedes as follows. Enter 65Arthur and
type
2.3
*spool thin2
2.3
*thin
2.3
*spool
2.3
where thin is the name of the original font file and thin2 is going to
be the new file. Then use a text editor (such as the Master128’s “Edit”)
and edit out the first and last line (i.e. the *thin and *spool). Then
resave as thin2 and settype it as &FF7 (BBC font). When you need it,
just type *thin2. If you do a *SHOW, you will see that the load and run
actions of a file type &FF7 is to *PRINT it − which is just what you
want.
2.3
• Command files − In order to disable vdu output during a command file
e.g. the !boot file, try:
2.3
*echo ||U
2.3
...
2.3
...
2.3
*echo ||F
2.3
Two string escape characters are needed (as I’ve explained in a previous
tip) so that the final command executed is *echo |U
2.3
i.e. <ctrl-U>. This issues a VDU 21 which disables vdu output until a
VDU 6 is issued <ctrl-F>.
2.3
This is similar to the ECHO OFF command of MS-DOS. Indeed if the string
used is:
2.3
*echo ||U|H|Hoff
2.3
then all that is visible is “echo off” which explains why nothing else
is visible to the user and also hides the control code sequence used.
The “compiled” string is then *echo |U<8><8>off. One side effect is that
two line feeds will occur so if this is undesirable a couple of reverse
line feeds can be incorporated with
2.3
*echo ||U|H|Hoff|K|K
2.3
Note that the use of single string escape characters means that the
cursor control codes will have immediate effect whereas the <ctrl-U>
will only be issued when the echo command is executed.
2.3
The double string escape characters are only needed for use with *Build,
if a text editor is used then only single characters are needed but the
control codes must be input directly, e.g. so they appear as inverse
video in TWIN, for those cases where the affect is immediate.
2.3
(Sorry if this sounds a bit confusing but the difference between two and
one |’s, and when to use which, is an entire discussion point on its
own. Perhaps this could be a short article − it is important whenever
command files issue messages etc.) Clifford Hoggarth.
2.3
• Quick *COPYing and *WIPEing − When you enter a wild card *COPY or
*WIPE on a list of files such as TEST1, TEST2, TEST3, etc. you are
presented with a list of options at the end of the copy or wipe
statement
2.3
*COPY :0.TEST* :1.TEST*
2.3
Copy file adfs::0.TEST1 as adfs::1.
2.3
TEST1 (Y/N/Q/A)?
2.3
etc.
2.3
The option Y, N, Q and A mean the following :-
2.3
Y − means copy that file
2.3
N − means don’t copy that file
2.3
Q − means quick copy all file with the wild card specification after and
including that one with no further confirmation prompts
2.3
A − means abort from copying
2.3
The *WIPE option works in a similar manner but deleting.
2.3
• Stereo Speakers − After reading the hint in Archive 1.2 about adding
a pair of Tandy amplified speakers, I promptly rushed off ‘to town’.
They had just run out of stock, because the £25 price-tag was a special
offer. However Tandy were very helpful and ordered me a pair which
arrived within a week and which at £29.95 are still excellent value.
However, a set of alkaline batteries was quoted as £7.95!! Instead, a
surplus old calculator mains adaptor and two power plugs (30p each from
a local electronics shop) provided a cheaper source of power. If you
don’t have a spare one, a new power supply from Rapid Electronics costs
less than £4. The magic moment arrived and I switched on! The buzz from
the speakers was horrific!, but soon drowned by mayhem and destruction
from Zarch, which in turn was swamped by the dulcet tones of ‘her
ladyship’ complaining from the other end of the house about the volume!
2.3
Back to the drawing board − two capacitors, recovered from an old tape
recorder smoothed the power supply output and banished the buzz. The
solution to the lack of volume control was to add two potentiometers.
Whilst I was at it, I decided to wire the volume controls into a socket,
so that Zarch could be enjoyed at a reasonable volume late at night
through a pair of personal stereo headphones as well as through speakers
at a more civilised hour. An hour’s work, a couple of pounds and I now
have glorious stereo sound, at a reasonable volume!
2.3
The diagrams below show the set up. A twin pot could be used instead of
two single ones, so that both speakers are controlled from one knob. Any
value pot from 100 ohms up to about 4.7k ohms will work, but 100 ohms is
ideal, though 470 ohm pots are easier to obtain. Logarithmic pots are
best, but linear ones work fine and are again are easier to obtain. The
big capacitor can be anywhere in the region shown (2500 microfarads/30V)
− the small one takes out the higher frequencies and again its value
(220 microfarads/16V) is not critical.
2.3
It’s worth noting that the speakers cut off only after a minute or two
if there is no sound being produced. Presumably there is a small
capacitor inside which needs to run down first. Similarly, they need a
certain minimum signal for a very short time in order for them to switch
back on. David Kent
2.3
• Ultra-cheap sound amplification − Maplin Electronics (0702−554161)
have an amazing offer including a pair of walkman-type headphones AND a
pair of monitor speakers for just £3.95! I don’t know how good they are,
but at that price, you can’t go far wrong. (Oh, there’s a handling
charge of 50p and a postage charge of 50p − still, it’s not bad.)
2.3
• View “OC” Command − In View B3.0, one of the highlights can be set
to 27 instead of the normal 128 for underline and 129 for emphasise. In
doing this, commands may be made directly to the printer as in the
Wordwise OC command. For example, to set highlight 1 to 27
2.3
<Shift-f8> HT<return> 1 27 <return>
2.3
On pressing <f4> (underline) the next character will be sent to the
printer as a command, i.e. ShFn4x1(-x1) will turn on NLQ mode (on some
Epson compatible printers). This system seems to work for most commands,
but some commands need an ASCII ,1 so to get round this set highlight
key 2 (emphasise) as 1 and type ShFn4wShFn5 (-x*) to turn on double
height for example. This does have the disadvantage that things can’t be
turned on and off in the same line as you have to set highlight 2 back
to 0 to turn it off.
2.3
• Two ARM Code Assembly Macros − (Richard Averill) − Here are two
useful macros for use in the BASIC V ARM assembler. They both use the
same method of loading 32-bit words into a specified register, which is
detailed below:
2.3
Originally, I had the idea that if I used the following piece of code:
2.3
LDR <reg>, [PC, #-4] !
2.3
EQUD <value>
2.3
then the processor would load the value and jump on to the next
instruction. However, what actually happens is that the value is loaded
and the ARM tries to execute the value as an instruction. If the high-
byte of the value is zero, then this will not cause a problem, but it is
not advisable to use routines that are not totally water-tight.
2.3
Here is the improved code:
2.3
LDR <reg>, [PC]
2.3
MOV PC, PC
2.3
EQUD <value>
2.3
which only takes one more word of code and works all the time. The MOV
PC,PC is there to make sure that the ARM executes the instruction that
is in the pipeline, and not the instruction in <value>.
2.3
Using these ideas, I have developed two useful routines detailed below:
2.3
DEF FNload(reg%, val%)
2.3
[ OPT opt% AND &E
2.3
LDR reg%, [PC]
2.3
MOV PC, PC
2.3
EQUD val%
2.3
] : =opt%
2.3
DEF FNadr(reg%, adr%)
2.3
[ OPT opt% AND &E
2.3
FNload(reg%, adr%-P%-20)
2.3
ADD reg%, PC, reg%
2.3
] : =opt%
2.3
As you can see, the macros can be used as any other instruction in the
assembler as such:
2.3
MOV R0, #123
2.3
FNload(1, &12345678)
2.3
FNadr(2, pointer)
2.3
SWI “OS_Anything”
2.3
A demonstration program is given (on the program disc) to illustrate the
use of these macros.
2.3
• Running ViewPlot under 65Arthur − Richard Averill − Listed here are
the changes needed to make ViewPlot ‘harness the power of the Archi
medes!’. They will tidy the programs up, allowing ViewPlot to run in any
mode and to print and save screens. A *Exec file of these changes is
provided on the monthly disc.
2.3
To use this file, transfer the ViewPlot disc onto ADFS into a directory
such as ‘ViewPlot’. You can either create a text file of these commands
(with *Build or a text editor) or you can type the commands in yourself.
Either way, you should make sure that you are in the ViewPlot directory
when you try to convert the programs.
2.3
*|Running ViewPlot under 65Arthur.
2.3
(C) Richard Averill, 1988.
2.3
*BASIC
2.3
LOAD “ViewPlt”
2.3
390
2.3
SAVE “ViewPlt”
2.3
LOAD “V__D”
2.3
730 IF M=248 OSCLI(“Screensave Image”)
2.3
:PROC2(R%)
2.3
SAVE “V__D”
2.3
LOAD “V__M”
2.3
1140 DEF PROC0:VDU 28,0,23,39,5:CLS
2.3
1190 REPEAT
2.3
1200 INPUT “Enter screen mode (not
2.3
text) ? “ M%
2.3
1210 UNTIL FNcheckmode(M%)=TRUE
2.3
DELETE 1220,1290
2.3
3000 DEF FNcheckmode(mode%)
2.3
3010 LOCAL col$,ok%
2.3
3020 ok%=FALSE
2.3
3030 IF mode%=0 OR mode%=8 OR mode%=12
2.3
OR mode%=15 OR mode%=18 OR mode%=19 OR mode%=20 THEN C%=16:ok%=TRUE
2.3
3040 IF mode%=1 OR mode%=4 OR mode%=9
2.3
OR mode%=13 THEN C%=32:ok%=TRUE
2.3
3050 IF mode%=2 OR mode%=5 OR mode%=10
2.3
THEN C%=64:ok%=TRUE
2.3
3060
2.3
3070 col$=“04”
2.3
3080
2.3
3090 IF mode%=0 OR mode%=4 OR mode%=18
2.3
THEN col$=“04”
2.3
3100 IF mode%=1 OR mode%=5 OR mode%=8
2.3
OR mode%=19 THEN col$=“15”
2.3
3110 IF mode%=2 OR mode%=9 OR mode%
2.3
=12 OR mode%=20 OR mode%=10 OR mode%=13 OR mode%=15 THEN col$=“2”
2.3
3120 IF ok%=TRUE THEN OSCLI(“LOAD Col”
2.3
+col$+“ 2600”)
2.3
3130 =ok%
2.3
SAVE “V__M”
2.3
LOAD “V__P”
2.3
250DATA 0,0,0,0,0,0,2,4,4,4,2,16,8,1
2.3
,16,0,0,0,2,2,16,4,1,16,0,0,0,2,
2.3
1,16,0,0,0,0,0,0,2,8,2,2,4,4,2,
2.3
2,16,2,1,16,2,8,2,2,8,2
2.3
1740DEFPROCJ(b%):e%(b%)=0:ONM%+1GOTO
2.3
1770,1810,1880,1880,1770,1810,1880, 1880,1810,1880,1880,1880,1880,1880
2.3
,1880,1880,1880,1880,1880,1770
2.3
,1810,1880,1880,1770,1770
2.3
2070DEFPROCE:FORb%=1TO8:e%(b%)=b%?
2.3
(&2608+((a%-1)*2+a%-10)*8-1):ONM%+1
2.3
GOTO 2110,2150,2200,2200,2110,2150,
2.3
2200,2200,2150,2200,2200,2200,2200, 2200,2200,2200,2200,2200,2200,
2.3
2110,2150,2200,2200,2150,2150
2.3
SAVE “V__P”
2.3
• Cheap colour monitors − Peter Sykes bought a Commodore 1084 monitor
which seems to be identical to the Phillips 8833 but cheaper. He got his
from Eazyprint in Staines, Middlesex for £240, around £20 less than the
cheapest he could find the Phillips 8833. (There’s an Acorn one for sale
in the small ad’s, but there must be other folk by now who are up-
grading to multi-syncs and have monitors for sale − send in your small
ad’s folks − no charge.)
2.3
• Use of Archimedes on Econet − Copying ADFS format discs to NET and
vice-versa, no utility is needed as Archimedes has it all built in:-
2.3
*COPY -adfs-$.* -net-$.whatever.* QRC
2.3
Here ADFS is the source, NET is the destination. The ‘whatever’ is the
chosen destination directory, or directory path (e.g. replace ‘whatever’
with ‘fred.mary.utils’) The * is to indicate all files. The Q indicates
QUICK copying using all available RAM. This damages resident programs
but considerabley speeds the copying process. It is also almost
essential if using early versions of the Econet Software Modules (NETFS,
ECONET) due to bugs in these which cause ‘Not Listening’ messages. Later
versions do not suffer this. The R to indicates recursive copying of
sub-directories. The C turns OFF confirmation so that copying occurs for
all files without question.
2.3
Simple modifications to the command line allow copying in the reverse
direction.
2.3
(This was sent in by Michael Ryan, editor of the Econet User Group
Magazine (NEUS) which carries regular articles on Archimedes on the
network (and many less esoteric matters as well). We have also been
licensed by Acorn to provide free upgrades to Econet software modules
for those unable to obtain them elsewhere. Econet User Group, Balkeerie
Cottage, Eassie by Forfar, Angus, DD8 1SR.)
2.3
FWP Hints & Tips
2.3
compiled by Mike Hobart
2.3
• Changing default drive − those of you with dual drives may want to
be able to get FWP to default to looking for data on drive 1. To do
this, all you do is load $.library.1wp and change the line that sets up
the documents directory to:
2.3
*set FirstWordPlus$Docs :1.$.
2.3
• Saving to a fresh disk − If you need to save your work onto a fresh
disk, you may have difficulty in persuading the save to work: you get
silly messages about the disk being write-protected and directories not
being present. This is very frustrating if you have just written the
first chapter of your bestseller. Try “Save as...”, taking special care
either to see that you are in the correct directory as specified in the
directory box at the top of the save window or create a new file in the
root directory by clicking repeatedly on the X icon until you are left
with only a “*”. Thanks to Peter Tettmar, on whose solution is differ
ent, but less convenient as you have to anticipate the problem!
2.3
• Form feeds in the wrong places − Edit your printer driver (the “hex”
directory one) to inactivate the “vertical tab to line” feature. This is
done by placing a “*” at the beginning of the line (line no 4, which
should now read *4, 1B,42,80,0,B or near). If you have serious troubles
with irrational formfeeds, try setting the CONFIGURE IGNORE of the
battery-backed RAM to prevent the computer ever sending to crucial code
to the printer. (Thanks to David Adamiak and from him to GST Holdings).
2.3
• Use of IBM fonts − Steve Jones points out that there can be
advantages in using the IBM font set, if your printer supports it. The
monthly disk con-tains his very full instructions and programs. The main
reason for using the IBM fonts is the availability of certain symbols
for maths and graphical characters. These can be especially useful for
designing forms.
2.3
• Graphics problems (e.g. that white is printed grey etc.) can be
cured by preparing the graphics in 1st Word palette. For Artisan, copy
1stword’s Resources.1wp.!palette as artisan.1wppal (or what takes your
fancy) on the Artisan disk, then boot up Artisan, grab the disk ikon and
finally select the new palette. The result is not artistic, but a quick
roller brush over the background with white, followed by the artwork in
e.g. black produces a picture you can import and have printed correctly.
The reason this works is that the graphics dump routine in 1st Word
assumes the use of the program’s own palette, or at least that it is
trying to produce a paper version of what you see on the screen. It is,
incidentally, quite an intelligent and quick dump, which checks to see
if there are pixels to print before printing a line, and issuing a
linefeed if not.
2.3
• Conversion from WWPlus − The following hint might be useful to
people still trying to convert WW+ file to 1WP. The convert program
published in Archive does a wonderful job. However, I found it a bit
irksome having to edit out all the ‘US’s and ‘UE’s etc which are left
after the program has dealt with the green and white embedded commands.
(This just goes to show how quickly we start to take things for
granted!!). I also found that it was impossible to reformat the text to
a new line length. The latter problem seemed to be that 1WP ended lines
with &0E, whist converted WW+ files ended with the last letter of the
last word on the line.
2.3
The solution to both problems is as follows:
2.3
1 SPOOL out the WW+ file, using Option 8 (This removes all embedded
commands and centres text and produces indents and TABs)
2.3
2 Reload the spooled file and use Search & Replace to change all
double returns to @@ (or any other unused combination of letters)
2.3
3 Change all of the remaining single returns to <space>-return
2.3
4 Change all of the @@s (or whatever) to <space>-return-return
2.3
5 SAVE the modified file using Option 1
2.3
6 Run the SAVED file through the convert program
2.3
The effect of 2, 3 and 4 is to save the paragraph breaks, but end all of
the lines with a space. The result is a file with no extra ‘remains’ of
embedded commands, and which will reformat correctly in First Word Plus.
2.3
H & T are a bit thin on the ground this month because this issue is
being finished before Christmas so I get some time off and it’s only a
couple of weeks since I closed the December issue, so not much has come
in yet. Most of the H & T that we have got were sent in by Anton Carver.
Thanks Anton!
2.4
• Using function keys − If you want to get the function keys to
produce ASCII codes, say, 200, 201, 202 etc, you use *FX 225,200 but
this only works for keys <f0> (the print key) to <f9>. If you want to
use <f10> upwards, you need to use *FX 221,200. This also makes <insert>
into the equivalent of <f13> i.e. it generates, in this case, ASCII 213.
2.4
• Troubles with Mitsubishi Drives? − Yes, there are problems with some
of the new 5.25” Mitsubishi drives with some of the 5.25” disc inter
faces, but they can be solved. The problem is the use of pin 2 on the
interface. It was not used on the BBC micro, but on the new Mitsubishi
drives it is used for DC interrupt. The solution is to put a little bit
of masking tape on the edge connector inside the drive mechanism so that
it doesn’t make contact with the p.c.b. Pin 2 is on the top of the board
at the outside edge.
2.4
• Programmable reset − A hang-over from the BBC micro is that if you
program function key 10, you will find that if you press <reset>,
function key 10 will be executed! If you don’t know about this, it can
come as something of a shock, but it could be that you would want to
make use of it if you were, say, developing a machine code program which
kept hanging up the machine and forcing you to press <reset>. You could
program it as *KEY 10 *BASIC|MOLD|MEDIT .|M and it would jump you back
into editing the program at the point where you were.
2.4
• Is it still going? − If you are doing some heavy machine code
programming and want to know if the computer is still working or whether
you have locked it up completely, try pressing the caps lock and/or
scroll lock keys and if they are still responding, your computer’s not
dead yet! The caps and scroll lock LED’s are controlled by the computer
in response to the key presses, so if they are working, it tells you
that the processor is still reponding to interrupts.
2.4
• Using ARMBE − It is useful to be able to enter ARMBE at the point of
the last error. Here is a program which sets up function key 4 so that
it enters ARMBE at the point where the error occurred or, if no error
then it enters where you were last editing by using “EDIT .”.
2.4
10 *set key$edit IF ERL=0 THEN OSCLI (|“KEY 4 *FIXKEY4||mEDIT . ||m|”)
ELSE OSCLI(|“KEY 4 *FIXKE Y4||mEDIT |” + STR$(ERL) + |“||m |”)|mMISTAKE
|m*FX138,0,132|m
2.4
20 *set alias$fixkey4 set key$4 |<key$edit>
2.4
30 *fixkey4
2.4
• REM’s − Although the User Guide says that REM statements are ignored
by BASIC, this is not completely true in BASIC V. This is because the
block conditional IFÉTHENÉELSEÉ ENDIF requires the THEN to be the last
statement on the line. Adding a REM to the end of the line will change
the flow of control, thus:
2.4
>LIST
2.4
10 OK%=TRUE
2.4
20 IF NOT OK% THEN
2.4
30 PRINT “Wrong!”
2.4
40 ELSE
2.4
50 PRINT “Right”
2.4
60 ENDIF
2.4
>RUN
2.4
Right
2.4
>LIST
2.4
10 OK%=TRUE
2.4
20 IF NOT OK% THEN :REM Danger!
2.4
30 PRINT “Wrong!”
2.4
40 ELSE
2.4
50 PRINT “Right”
2.4
60 ENDIF
2.4
>RUN
2.4
Wrong!
2.4
• MODE3/6 gaps − There is an undocumented difference between the way
that the gaps between lines are coloured in the 25-row modes. In modes 3
and 6, the gaps are the border colour and in modes 11, 14 and 17, they
are the background colour.
2.4
By experimenting with SWI“OS_ReadMode Variable”, I discovered that bit 3
of variable 0 (Modeflags) indicates the condition. If the bit is set to
0, the gaps will be background colour and if 1 they are border colour,
thus:
2.4
10 For mode%=0 TO 17
2.4
20 MODE mode%
2.4
30 VDU 10,0,24,128,0|
2.4
40 SYS“OS_ReadModeVariable”
2.4
,MODE,0 TO ,,modeflag%
2.4
50 PRINT “Mode= ”;MODE
2.4
60 IF (modeflag% AND (1<<3))
2.4
<>0 THEN t$=“Border” ELSE t$=“Background”
2.4
70 IF (modeflag% AND (1<<2))
2.4
<>0 THEN t$=“No”
2.4
80 PRINT t$;“ gaps”
2.4
90 wait%=GET
2.4
100 NEXT
2.4
• Auto linefeed − Some software packages, like First Word Plus for
instance, insist that you set your printer so that it does not generate
auto-matic linefeeds. This means that if you list a BASIC program with
lines that are longer than the carriage length, the line wraps round and
is overprinted. To avoid this and the difficulty of fiddling with dip
switches, use the BASIC command WIDTH before printing. To do this, type
WIDTH <carriage length> (e.g. WIDTH 80) before printing and WIDTH 0 to
reset to the default setting after printing.
2.4
• How to wipe a disc clean − Having explained in H & T in issue 2.1
how to use *LIB“” and *WIPE * ~C to wipe a disc clean, here is the
really quick way! Take a blank disc and do a *BACKUP onto the disc to be
purged − takes about 10 seconds all together, even with only a single
drive!
2.5
• Microlink Modem connections − We have at last sorted out the
connections necessary for the Microlink Multispeed modem. The problem is
that it seems to need two different connections depending on whether you
are using ArcTerm or Hearsay. Anyway, here are some connections that
seem to work OK. ArcTerm version first:
2.5
Modem Computer
2.5
GND 1
2.5
}Ñ 5 GND
2.5
GND 7
2.5
RXD 2 Ñ 3 TXD
2.5
TXD 3 Ñ 2 RXD
2.5
RTS 4 Ñ 7 RTS
2.5
CTS 5 Ñ 8 CTS
2.5
6 DSR
2.5
DSR 6 Ñ{2 .5
1 DCD
2.5
DTR 20 Ñ 4 DTR
2.5
Note that the Archimedes DCD is not connected to the modem DCD but to
the DSR to ensure that it is ON all the time. The modem DCD is only ON
whilst on-line. Here are the Hearsay connections:
2.5
Modem Computer
2.5
GND 1
2.5
}Ñ 5 GND
2.5
GND 7
2.5
RXD 2 Ñ 3 TXD
2.5
TXD 3 Ñ 2 RXD
2.5
RTS 4 Ñ 7 RTS
2.5
CTS 5 Ñ 6 DSR
2.5
DSR 6 (NC)
2.5
DTR 20 (NC)
2.5
DCD 8 Ñ 9 RI
2.5
1 DCD}
2.5
4 DTR} linked
2.5
8 CTS}
2.5
• BBC Hard Discs − If you have BBC hard discs that use the 1 MHz bus,
you can run them on the Archimedes under the new 6502 emulator,
“65host”, that comes with RISC-OS. All you do is enter 65host and load
the BBC 1770 ADFS then, assuming you have an I/O podule, connect the
hard disc to the 2 MHz bus and away you go.
2.5
(Surely it wouldn’t be too difficult, would it(?), to patch it into the
existing operating system to make the hard discs accessible in native
mode instead of limiting it to use with the emulator? Could anyone do
that for us? Ed.)
2.5
• Naff RTC Month − If you get this error message when running the
desktop, the chances are that it is time to change your batteries. Acorn
suggest changing them once a year.
2.5
• Repton 3 − first a comment − The characters included are exactly the
same as in the BBC version even though they are mode 9, so it looks like
mode 5 on the BBC. This is disappointing as the extra resolution and
colour are wasted unless you redefine the characters − a mammoth task as
there are 768 altogether! (Phil Armstrong, Doncaster)
2.5
Phil also saysÉ I redesigned the first 48 characters which took quite
some time and I did encounter a few problems, namely my maps occasion
ally were wiped or the start position changed. To get round this
problem, I examined the data files and found:
2.5
&0000 to &10A0 8 Map definitions and colours for each map
2.5
&10A0 to &70A0 48 character definitions
2.5
So if you lose your maps or wish to copy a character set to another set
of maps, follow these operations:
2.5
*Load Newdata 10000 load new char-acters as saved by editor
2.5
*Save Char 110A0 170A0 save character set alone
2.5
*Load Olddata 10000 load file contain-ing required maps
2.5
*Load Char 110A0 overlay new character set
2.5
*Save Newfile 10000 170A0 save maps and characters together
2.5
Newfile can then be loaded into the game. Changing characters does not
seem to affect the competition numbers the game gives you.
2.5
• Games on the 440 − Many games programs will not run on the 440 if
the screensize is set above 160k, so you should try *Configure Screen
size 5 before running the game.
2.5
• Pacmania − Two avid “Pacmaniacs”, Harjit Takshak and Linus Twizell,
have provided some Pacmania hints:
2.5
Do a *LOAD PACMANIA 10000 then you can set the number of lives with
?&102C8 = n (but too many slows the games down) and ?&113D4 = n sets the
number of points per pill and ?&10234 = n sets the number of credits and
then CALL &10000 starts off the game.
2.5
• GammaPlot − It is possible to change the colour of a line on a line
graph by using the command *SG17,n,128 where n is the GCOL number (e.g.
48 = blue). This command can also be used in the Macro mode followed by
a line with GRAPH (just the graph) or CHART (graph and axis). The colour
will be saved, along with the graph, to disc.
2.5
• Printer problems − there have been one or two problems with spurious
operation of printers, especially with Integrex printers when doing
graphics dumps. These are caused by timing problems on the Archimedes’
parallel port control lines and can be solved by an internal circuit
board modification that Acorn have recognised as a field change, i.e. if
you are having problems, go to your local Archimedes dealer and ask if
he can do field change 2002 for you. (D.I.Y. field changes will void
your warranty, but if you want details anyway, send us an S.A.E.)
2.5
• Conditional booting (cf Archive 2.3, page 13) Philip Colmer says
that unfortunately *FX200,2 followed by reset is treated as a power-on
reset so the monotonic clock is reset. Probably a better way is
SYS“OS_Byte”,253,0,255 TO break% where break% is 0 for soft break, 1 for
power-on reset and 2 for a hard break − a bit more reliable than
checking a clock value.
2.5
• BCPL on ADFS − J Laski writesÉ I am a BCPL freak: due to the fact
that ADFS was not available when it was designed, the ROM system causes
files to be read/written with OSBGET/PUT rather than OSFILE/OSGBPB;
also, intermediate files in the compiler and editor use names such as
Backup$ which ADFS abhors.
2.5
To get round this, patch the routine in the ROM (image disk) FSTYPE
(G39) always to return 7 (see manual p117). In both BCPLARG and BCPLCCG,
patch the second static load (LLL) in G1 from “OCODE$$” to “OCODE!!”. In
ED, in G318 patch the static load in G318 about 40 words before the SWL
near the end of the routine; this can best be found by looking for the
long forward jump about 30 Cintcodes from the beginning. (N.B. I use an
extended ED, so have only given rough positions; G318 is the last
routine called from G1.)
2.5
If you feel you cannot make these changes yourself, and send me a disk
with proof that you have a legal copy of BCPL and a stamped self-
addressed mailer, and I will send you a modified version. I would
appreciate, but do not insist on, any utilities that you think might
amuse me.
2.5
I am seeking a version of BCPL in ARM code and, if ACORN cannot be
persuaded to release their version, will do it myself, probably somewhat
‘adhocly’. If you have any views on desirable facilities, I should be
glad to read them. I shall shareware distribute with a licence fee
requested. (Dr J Laski, 18 Ebury Street, London, SW1W 0LU.
2.5
• “Colour Printouts − The Easy Way” − I read with considerable
interest the article by W R (Basil) Davis on taking 35mm photographs of
the monitor screen. (Archive 1.9, page 52) I was able to put this to
practical use recently since I wished to design and produce some
graphics screens (using GammaPlot) and use these in a conference
presentation. I did consider using acetates with an overhead projector,
but decided 35mm slides would be more suitable.
2.5
The following additional comments (which should be read in conjunction
with the original article) may assist other Archive readers contemplat
ing taking such pictures:
2.5
1) Before embarking on photographing any screen displays, it is
important to remember that any apparently minor “blemish” will be
magnified considerably if your results are being projected using 35mm
slides. Careful thought should be given to the screen layout and the
choice of colours; provided they don’t clash, brighter foreground
colours are preferable, with black or a dark blue making an ideal
background. The normal Archimedes text is quite visible when projected
using 35mm slides; additionally I used a GammaPlot feature to enlarge
the standard text for titles etc. and, whilst this was quite acceptable
on a monitor screen, when projected it did appear noticeable “chunky”.
Next time I will use the Archimedes special fonts with GammaPlot
instead.
2.5
2) In choosing the 35mm film to use, one important consideration may be
the speed with which you wish the results to be returned to you. Whilst
most colour print films can be developed overnight or even within an
hour or so, this is not the case with colour slide films. Most have to
be sent away for processing and a delay of 10−14 days is not untypical.
If you want colour slide film developed quickly it is best to use (non
“process paid”) Kodak Ektachrome film which good photographic shops
should get returned to them within 2−3 days. There are also a few
specialist laboratories which offer a 2−3 hour service.
2.5
3) When determining the correct ‘peak white’ exposure using an automatic
camera, it is possible for the camera’s metering system to be too
sophisticated! I was using a Minolta 7000 AF camera and the exposure
settings fluctuated quite rapidly as the monitor screen picture was
scanned and refreshed. Checking the exposure using a different camera
confirmed the article’s “if all else fails” assumed exposure settings.
2.5
4) Focusing may well be perfectly feasible when using a camera with
auto-focus. I found it best to set the initial focus with a screen
display visible, rather than a blank screen, and then switch the auto-
focus off − this is because the Minolta 7000 AF system tries to refocus
after every picture is taken. In setting the combination of shutter
speed and aperture, it is probably preferable to err towards the slower
shutter speed/smaller aperture (higher ‘f’ number) setting as this will
increase the ‘depth of field’ and give a greater safety margin if the
focusing is not quite right.
2.5
5) As mentioned in the original article, a sturdy tripod is virtually
essential and a remote shutter release (or possibly the camera’s Delayed
Action feature − if fitted) must be used to avoid camera shake and
consequent blurred pictures. Additionally, switching off the room lights
when taking the photographs should avoid any extraneous reflections off
the monitor screen possibly spoiling the finished results.
2.5
6) If you are using 35mm slides and the results are to be projected
using a professional (rather than domestic) slide projector, it is
definitely worthwhile having the slides ‘glass mounted’ − although this
does increase the cost! This prevents the heat from the projector lamp
“popping” the slide and causing part(s) of it to appear out of focus.
For those who are interested in further reading on the subject, there is
an article in January 1989’s issue of BBC Acorn User (pages 81-83) on
the subject of taking photographs of the computer screen, there is even
advice on taking pictures of commercial games software. Rob Brown.
2.5
2.5
• Willie Stott has sent in a very complete set of facilities for
support of the Epson LQ series, including a download font designer. This
will only be of interest to those with the right hardware, but he has
used a neat idea to get control of any extra facilities that your
printer supports, but for which First Word Plus has no category. He
points out that foreign characters can be used as printer definitions.
The characters with ASCII values between &E0 and &EE appear on the
bottom line of the character window and you have to do three things:
2.5
a) Define the character as a suitable message to the printer in the
character translation table of the hex file, then turn it into a driver.
2.5
b) Design suitable character definitions (using VDU23,...) to
represent the action of the printer so that it is added to the compu
ter’s character table when FWP is booted up.
2.5
c) Include your definitions in the FWP boot file before the *key 1 ...
line.
2.5
• A tip from an unknown writer (maybe Paul knows who to acknowledge −
Sorry, no. Ed.): how would you like to be able to produce a spool file
of your FWP output? What? Not much!? You may be missing something, as
you could then move the file to another machine and get a printout via
that machine, e.g. via an IBM or a mainframe. The trick is to *SET
PrinterType$4 <spoolfilespec> before booting up FWP. Then select
“network port” from the printer box in FWP. The system variable
PrinterType$4 holds the pathname for network printer output. The
<spoolfilespec> needs to include the full adfs:$.filename format.
2.5
• Someone besides me is the kind of two-fingered typist that hits
<ctrl> at the same time as <A>. What should our correspondent do? File
his fingers down? Stick a piece of rough Velcro on the <ctrl> key? No,
contact the Archive office and have someone write a module to intercept
<ctrl-A> and make a beep. The trouble is that when you are just feeling
bold enough to try to modify a bit of assembler to help a friend, you
should not choose a keyboard buffer intercept. There is no way to try it
out safely, or even to get a decent service from the debugger as every
keypress goes via your duff code. You cannot even type “*rmkill”
successfully. The only key which really works is <reset>. Help!! All
serious programmers out there: where did I go wrong? Why does the IRQ
stack pointer unwind so fast? P.S. If you can include a <ctrl-f12> =
swapcase facility in the module, you will win a large “thank you” and a
small prize for the best solution. You can start with the PrintKey
module program in Archive1.10, page 45.
2.5
• There is a new version of FWP available from Acorn for those whose
copy does not pause at the ends of each page, even if the flag has been
correctly set in the printer driver. Return your disk to Customer
Support, Acorn Computers Ltd., Fulbourn Rd., Cherry Hinton, Cambridge
CB1 4JN. (Reprinted from BBC Acorn User, Feb ’89, p 10).
2.5
It is rumoured that there is a genuinely new version on its way, perhaps
to coincide with RISC-OS.
2.5
• Johnathan Young has a cure for the FWP buzz (the one which comes out
of the speaker or down the external audio output, and sounds like the
onset of tinnitus): boot up and then exit EMR’s sound synth package. A
bit expensive for silence, but you get the music program free! Has
anyone an explanation or a better solution?
2.5
• Dacom modem connections − If you want to connect a Dacom modem to
the Archimedes, try the following connections:
2.6
Archimedes Modem
2.6
2 Ñ 3
2.6
3 Ñ 2
2.6
5 Ñ 7
2.6
9 Ñ 6
2.6
Also link 1, 4 and 8 at the Archimedes end and also 6 to 7. If you are
using Hearsay 1.04, use the Tandata modem driver, not the Dacom one.
2.6
• Easy copying − If you have a single drive, try setting
2.6
*set alias$dcopy %0 :0.%0 PQ
2.6
Then you can use, say,
2.6
*dcopy filetocopy
2.6
and this will copy the file “filetocopy” onto another disc on the same
drive, prompting for disc changes.
2.6
• Easy compacting − This could apply to a number of commands, but if
you want, for example, to compact a disc several times, you can use
*repeat 6 compact which will do a *compact 6 times if you have previ
ously set an alias for repeat as follows:
2.6
*set alias$repeat if %0>0 then repeat %0-1 %*1|m if %o>0 then %*1
2.6
• Masked Sprites − The Welcome Disc Sprite Editor was criticised in
November 88 Archive as not working properly. It does work properly, well
almost!
2.6
To create a masked sprite, first draw your sprite as normal, then press
<shift-f9> (create mask) then select the colour that you want to be
transparent and fill in any areas that are to be transparent. The
display will show a hatched effect for that colour.
2.6
To plot a masked sprite, remember that you must use a GCOL 8,0 before
plotting the sprite.
2.6
• Hard disc Backup program − Paul Hobbs sent in the following
improvement to last month’s hard disc backup programÉ The very useful
hard disk backup program in Archive 2.5 can, I think, be improved very
easily by the addition of the following lines after the line PRINT
CHR$(13);”Scanning: “;... etc in PROCaction(). It allows a check to be
made for directories not to be backed up. The full path name should be
given as in the example below. Quite a few of the directories on my disk
are backed up on their own floppies and this modification saves a lot of
time.
2.6
1621 RESTORE
2.6
1622 skip=FALSE
2.6
1623 REPEAT
2.6
1624 READ nocop$
2.6
1625 IF LEFT$(dir$,LENnocop$)
2.6
=nocop$ THEN skip=TRUE
2.6
1626 UNTIL nocop$=“*** END ***”
2.6
1627 IF skip=TRUE THEN ENDPROC
2.6
7000DATA :4.$.1WP.cfg,:4.$.1WP.doc
2.6
.BAK,:4.$.TMP,:4.$.BBCTelSoft
2.6
7001DATA :4.$.TMP,:4.$.CPROGGIES,
2.6
:4.$.BACKUP,:4.$.1WP.hex
2.6
7002DATA “*** END ***”
2.6
• Hard disc squeek − Those who are lucky enough to have hard discs may
be suffering a continuous high pitched squeal from the drive when the
machine is switched on. My dealer assured me that it would eventually go
away, but I lost patience and cured it by lubricating the disc drive
spindle with WD-40 (or similar). If you remove the disc drive and look
into the connector end, between the printed circuit board and the drive
body, you should be able to see a carbon pad mounted on the PCB which
rubs against the end of the spindle (to earth it and avoid static
problems). Using an aerosol can fitted with a long tube, a few drops of
lubricant on this pad will cure the noise. Take care when squirting −
and naturally no responsibility is accepted!
2.6
• C routines − When using the tmpnam() or tmpfile() routines in the
ANSI C library, a directory &.Tmp needs to be created on the current
drive. This is not present on the master floppy, nor is it created by
the hard disc install procedure (installHD).
2.6
• ANSI C command line parameters − page 31 of the manual says that
“Arguments to main() are the words of the command line, delimited by
spaces”, but gives no further information. The parameters are actually
passed in the same way as the Unix2 environment does − for those
programmers unfamiliar with Unix, the main procedure is called with two
arguments, which are declared as:
2.6
int main(argc,argv)
2.6
int argc;
2.6
char *argv[];
2.6
{2 .6
/* argv[1] points to first
2.6
parameter
2.6
argv[2] points to second,
2.6
etc.
2.6
Program name is at argv[0] */
2.6
where argc is the number of parameters given (which includes the program
name, so this will always be at least 1) and argv is an array of
pointers to the parameters − argv[0] is the command name and argv[1] is
the first parameter. Parameters are normally separated by spaces, but
quoted strings are passed as one unit. Some programmers prefer to
declare argv as:
2.6
char **argv;
2.6
and use it as a pointer to a list of pointers to the arguments.
2.6
• BBC Master Edit − If you want to use an image of the Edit ROM (the
Master version) under 65Arthur, you need a *ALPHABET BFONT before
running it up, otherwise the on-screen help display looks very confus
ing. This ROM, by the way, uses CMOS byte 8 (“reserved for Acorn use”)
in which to save the screen mode and help level.
2.6
• *COPY without the ‘Q’ − omitting the Q option when copying a file
forces Arthur to ignore bad sectors or tracks in a file. This allows you
to recover screens or text files from corrupted discs If you have a
single drive and don’t want to perform umpteen swaps then proceed as
follows:
2.6
*DELETE or *COPY (with Q) the other files until you have room for
another copy of the bad file.
2.6
Then *COPY :0.filenme :0.BADfilenme ~C~PV
2.6
• Orion loading speed − To speed up the loading, note that there is
what appears to be a non fatal bug in the “$.Orion.Orion_bas” program.
It *sload’s a sprite file seven times!
2.6
LOAD “$.Orion.Orion_bas”
2.6
now look round about line 3000 and you will find the *sload command that
should be outside the FOR/NEXT loop!
2.6
Edit this and then save the program back onto the disc. (The name at the
top of the program has an extra ‘n’ at the end which has to be deleted
from the filename as displayed by the editor if you try to save it with
<f3>)
2.6
• Orion − Feel like a laugh? Instead of EDITing “$.Orion.Orion_bas” as
above, try :
2.6
*con. scr. 20
2.6
*con. spr. 20
2.6
<ctrl-break>
2.6
*DIR Orion
2.6
LOAD “Orion_bas”
2.6
701 *UNSET BJS
2.6
RUN
2.6
Then when you press <space> to load the game you get a marvelous
digitised laugh! This is apparently a (very clever) part of the
protection used in the program.
2.6
• Extended life for Orion − While the instructions are scrolling up
the screen try pressing <U>, <L>, <C> and <space> together but in that
order. It then allows you to select a level at which to start the game
and you will find that you start with 10 lives & 10 smart bombs!
2.6
• Zarch cheat − you can get into the cheat mode if, when you first
start up and are sitting on the landing pad, you press <Q>, <T> and <U>
together but in that order. You may have to try it a few times. Now <L>
gives you an extra life, <F> refuels (in mid-air) and <D> toggles the
auto-pilot.
2.6
• Zarch − Some new landscapes make this game much better. (Program
NewWorld on monthly program disc or send S.A.E. for listing.) This
program works with the original protected version of Zarch as long as
you have screen size to 160k and other sizes to zero. It uses a
variation of the PRINTKEY program in one of the earlier Archives.
(PRINTKEY had a bug in it! P%=0:O%=code% OPT 4-7)
2.6
• Terramex. For endless lives, with Terramex disc in drive, type:
2.6
*LOAD TERRACODE 9000
2.6
!&CF18=&FAFFDC3E
2.6
!&CF20=&FAFFDC3E
2.6
CALL &9000
2.6
• Quazer − with the Impact software version of Quazer (which appears
to be the same as V1.42) type:
2.6
*SETEVAL Quazer%MeatHead 1 -Immortal
2.6
(also try Quazer%Lives, Quazer%Level)
2.6
Then use *Quazer to Run
2.6
• OS_FSControl problem − David Scott reckons there is a problem with
the system command for the COUNT operation. The OS_FSControl (&29)
system command for filing system control with R0 set to 28 (page 262 of
the Programmers Reference Manual) has a problem which is not apparent
from the description given.
2.6
If the call is used in a program to obtain values for use by the program
it is not possible to do this without the information also being printed
on the screen. This is because bit 8 of the action mask in R3 must be
set in order to get the correct values returned in R2 and R3.
2.6
The way round this problem is to turn the screen output off using VDU21
before making the system call and then to turn it back on afterwards
with VDU6. If a printer is connected then this will also have to be
temporarily disconnected with VDU3 before and VDU2 after the call.
2.6
• Potential Electrocution! (Archive 2.5 p19) − This is a problem with
most colour monitors. The explanation is as follows... When you turn the
power off, a static charge forms on the screen surface, creating a
potential difference of several KV between the monitor chassis and the
screen surface. If you then pick the monitor up with the screen facing
your body, the screen is effectively connected to your body, and so the
potential now exists between you and the monitor chassis, and remains
there due to the insulating properties of the plastic case. If you then
touch the chassis via a mounting screw or the rear connector, the
potential will be discharged, possibly painfully! (I speak from
experience!) The answer is to make sure you are touching the chassis
(e.g. the RGB connector shell) BEFORE picking it up, and keep hold of it
whilst carrying the monitor. The other answer is to lift and carry it
with the screen away from you.
2.6
• Pipedream on RISC-OS − As reported last month, the current version
of Pipedream DOES work under RISC-OS. All you have to do is *RMKILL
International to kill the international keyboard. This is because Acorn
have changed the use of the <alt> key under RISC-OS and Pipedream uses
this for its drop-down menus.
2.6
• PC Emulator problems − You may have problems with the computer
locking up when you are using the PC emulator. This happens sometimes
when you have a modem connected to the RS423 port which is not switched
on. I suspect it may be the “unknown IRQ at &00000000” which Arthur
manages to cope with but perhaps the PC emulator can‘t. Try keeping the
modem switched on.
2.6
• Stacked bar charts in Gammaplot − In Gammaplot it is not possible to
produce directly “stacked” or segmented bar charts such as:-
2.6
2.6
2.6
2.6
Nor is it possible to create directly bar charts with gaps between the
bars such as-:
2.6
2.6
2.6
2.6
but it is possible to create them indirectly by using a table with (say)
only 1 in 5 of the values as a non-zero number (i.e. make other gaps by
introducing zeros in the spreadsheet).
2.6
Multiple bar charts such as:-
2.6
2.6
2.6
2.6
2.6
Can be created by producing three (or more) separate graphs from three
separate spreadsheets and then overlaying one on the other by using
“Display all graphs” and using the “Window facility to move each (of the
3) separately to the desired position. The diagonal lines and any text
(such as scales or title) is added in “Customise” afterwards.
2.6
I know of NO package which produces segmented bar charts. Presenter will
produce multiple bars directly but without the flexibility of Gamma
Plot.
2.6
If you had the patience then you could make several different bar charts
and use the “Block Move” facility of “Customise” to stack the blocks of
the bars but it would take time and might be a lot easier in, say,
Artisan which has a “transparent” colour for use with its sprites.
2.6
(N.B. Overlaid line graphs and multiple pie charts are very easy in
Gammaplot.)
2.6
2.7
• BBC winchester on Archimedes!! Alan Glover saysÉ I have got it to
work on the i/o podule under RISC-OS. Here’s what you do: from the
!65Host directory:
2.7
*RMLOAD !RunImage
2.7
*CACHEROM 0 dnfs
2.7
*CACHEROM 1 ARFS
2.7
*CACHEROM 2 <>.ADFS130
2.7
*EMU.
2.7
Note: Must be ADFS 130 − i.e. a B/B+ version and you must find an image
of this yourself as it is not provided with RISC-OS. To use the
Archimedes’ ADFS type *ARFS.
2.7
The winchester is connected to the 2 MHz bus (theoretically 1 MHz!) on
the I/O podule as it would be on a BBC.
2.7
• Configuration problems in Art Nouveau − If you select ‘Configure
machine’ from the opening menu when you have already configured the
machine, you lose your old configuration when you quit and you are left
with Art Nouveau’s own configuration. This is because it doesn’t keep
track of whether you have already configured it. I was lucky − I had
written a program long ago that translates a *SPOOLed *STATUS into a
load of *Configure’s and I keep a copy of this spool on my hard disc at
all times. You have been warned. Martyn Lovell.
2.7
• Graphic Writer with a Star SG-10 − If you can have one complaint
about Graphic Writer (apart from the manual) it’s the printer support. I
own a Star SG-10 and am trying to let Graphic Writer use it to the full.
The Star has an NLQ character set, but this cannot be combined with any
other text style except underlined. So what I want is to adapt the
printer driver so that it would normally print NLQ and for the other
effects resort to draft printing. For this, I used the Printcon program
and gave the following codes:
2.7
Initialisation:
2.7
ESC “@”
2.7
ESC “G”
2.7
ESC “4”
2.7
Which resets the printer, turns on double-strike (gives better bold, but
you may omit it) and NLQ. Make sure the printer is in IBM mode.
2.7
For configuration (leave the rest the same as a FX80):
2.7
Plain: 27,70,27,52
2.7
Bold: 27,53,27,69
2.7
Italic on: ESC “I”,1
2.7
Italic off:ESC “I”,0
2.7
Note that the input routine of the printcon program doesn’t accept two
“ESC” sequences on one line, but it accepts two 27’s. The italic codes
are different from an FX80. In fact, FX80 compatibility turns out to be
somewhere in between the “Star” and “IBM” modes of the Star SG-10. The
trick is the plain and bold codes. When Graphic Writer finds a “Bold”
code it now also sends an NLQ-off code to the printer, which in effect
makes the printer print in draft, emphasized and double-strike, the
latter being already set at initialisation. (Yes, it is confusing, isn’t
it?!) This makes it possible to mix NLQ, bold and italic-bold in the
text. However, you can’t use italics or super/subscript without bold.
These just print in normal NLQ.
2.7
The same method should apply to other printers which can’t do everything
in NLQ.
2.7
Another tip on Graphic Writer is that you should always make any graphic
as big as possible, i.e. use the whole graphic area, however small you
want the picture to be. This makes page composition a lot easier and
also causes less problems with distortion when rescaling.
2.7
• Interrupt module − The interrupt module by Steve Hoare (Archive 2.6
p44) is very useful especially, as he states in his article, with First
Word Plus for creating directories etc. However there is a problem
associated with *interrupt 0. This is that the pound key also generates
ASCII 0 (a bug in OS1.2 I think) which means that every time you type a
‘pound’, the interrupt module takes over and opens up the OS window.
However, <ctrl-O> is unused by First Word Plus, so I use *interrupt 15
instead.
2.7
The module also comes in handy when using a comms program to check on
filenames, *type logfiles etc, but there is an enhancement that I think
would make it more useful still. While in the OS window, it is possible
to type <ctrl-Z> to open up the text window to the full screen which is
handy, but on exit (in a WIMP program) only the top half of the screen
is restored. If the source code could be modified to issue a redraw
request for the whole screen it would be an improvement. Having looked
at the code, it should be easy to do. Any offers?
2.7
• Memory shortage on Logistix and First Word Plus − To get round the
‘out of memory’ snag which seems to turn up so often with First Word
Plus and Logistix, if you have the 1.20 PC emulator, use the PC.PC
startup routine first and then, instead of using the MS.DOS disc, insert
Logistix instead and <reset>. <Ctrl-break> will then autoboot Logistix
with a whole 275k of memory free to use.
2.7
• Mitsubishi Disc Drives − Here are a number of points to bear in
mind, writes Vic Budd, when adding external disc drives. If, after
considering these, you feel competent to carry out the work, go ahead.
If not, it is prudent to entrust the work to an experienced operator to
avoid frustrations and disappointments.
2.7
There are different circuit board layouts, but the basic checks on the
drives are the same.
2.7
1. Remove link MS if made and change to adjoining position MM.
2.7
2. Remove link IU if made and discard it. On some drives there is no
removable link. However, there is a circuit board foil link, DI, near
the data cable edge connector, which is connected to pin 2, and this
should be cut in these instances.
2.7
3. Move drive selector link to position 1, 2 or 3 according to which
command you wish it to respond. (This assumes that the internal drive is
to be 0).
2.7
4. The resistor pack should be in place. On some drives this consists
of a single plug-in IC type device, whilst on others there is a row of
DIL pins which should have shorting links inserted.
2.7
5. Make sure the data cable is correctly orientated − it will need to
be at 180 degrees compared to the three and a half inch drive
connectors.
2.7
6. If, as I do, you wish to run a second three and a half inch
external drive and a five and a quarter inch drive, the connecting cable
will, of course, need to be turned through 180 degrees to connect the
drives together.
2.7
7. If you decide to use the Archimedes’ power supply, check the
connections carefully before attaching the cable connectors, making
quite sure you do not get the 12v and 5v leads confused.
2.7
If you do all these things correctly, you too should have no problems
with the Beebug lead and will be able to access drives A, B and C under
the PC Emulator, as well as 0,1, and 2 under ‘native’ Archimedes.
2.7
• Moving the pointer when it is not linked to the mouse can be greatly
simplified by using the POINT TO x%,y% command which does exactly what
is needed (note that you must unlink the pointer from the mouse first
with MOUSE ON 129). Details are in the User Guide and under HELP POINT.
Having looked at the relevant part of the PRM, it appeared to be
impossible to do this, so I decided to have a rummage around in the
BASIC module. This resulted in the discovery of some undocumented calls!
Basically these are extensions of OSWORD &15 whereby putting &05 instead
of &03 at R1+0 causes the pointer position to be set instead of the
mouse position (see PRM p.133). Also, values of &04 and &06 appear to
read the mouse and pointer positions respectively, though the code to
read the mouse position contains a fatal bug in Arthur 1.2 and cannot be
used! In theory it might be possible to patch it with a copy of the
UtilityModule in RAM but this module refuses to be RMKILLed. Martin
Simmons
2.7
• Problems with *UP − If you are having problems (as expressed in the
Help Section last month) with *UP or the use of ^ in a pathname, it is
probably because of a bug in the ADFS. The problem occurs when a
directory is renamed. The ADFS does not seem to keep track of it
properly. The solution, apparently, is to do a *COMPACT on the disc.
2.7
• Repton 3 again (Philip Armstrong) − I’ve got a few more comments on
Repton 3. Firstly I hope that no one saved the new characters and maps
onto the original disc. I have found that occasionally, the maps have
been corrupted and thus rendered impossible. If you find a screen that
you can’t do then check it with the original version. For those people
that can’t get to grips with the array of different characters, create a
second disc with all the files using a standard set of characters. This
makes the screens easier to complete. I have included on the monthly
program disc, the new characters that I use. They are not brilliant, but
a distinct improvement on the original set. Superior Software only state
that characters and maps cannot be used for commercial exploitation, so
it is OK for us to distribute in this way. There is also a simple
program to merge maps and my characters. Also, if you cannot stand the
tune that accompanies the loading program of Repton, then change *tune1
to *tune0 in the “config” file.
2.7
Here is a list of Passwords for Repton 3. Sorry it’s not complete, but I
do have other things to do. If anyone can do screen E of WORK
(p=scratch), I’d be pleased to hear from them because it looks imposs
ible and I have checked it against the original. I suspect a transporter
has been defined wrongly.
2.7
A Prelude B Rescind C Periwig D Mortify E Forsake
F Gratify G Thistle H Spangle
2.7
A Toccata B Nocturn C Liberal D Inspect E Delight
F Botanic G Vitriol H Sacking
2.7
A Finale B Yardarm C Zealous D Without E Aviator
F Elderly G Juniper H Crimson
2.7
A America B Herbage C Kitchen D Outcast E Quarter
F Untwine G Tremble H Strange
2.7
A Arctic B Kinetic C Gondola D Lozenge E Rotunda
F Frontal G Younger H
2.7
A Orient B Organic C Armhole D Visible E Neglect F
Biplane G H
2.7
A Oceans B Distain C Mundane D Eclipse E Warning F
G H
2.7
A Africa B Quickly C Zigzags D Closely E Panoply F
Bonfire G H
2.7
A Baby B Startle C Measles D Granite E WhimperF
Cushion G Alimony H Utensil
2.7
A School B Qualify C Knicker D Dynamic E Tendril F
Lanyard G Vinegar H Yaskmak
2.7
A Teenage B Eternal C Whisper D Feather E Rhubarb F
Jasmine G H
2.7
A Work B Inverse C Parapet D Elegant E Scratch F G
H
2.7
A Oap B Jackdaw C Rupture D Archery E Figment F
Natural G Tonight H Brigade
2.7
A Prehist B Dormant C Mineral D Varnish E Dashpot F
Lobelia G Upright H
2.7
A Egypt B Lobster C Tabloid D Achieve E Gristle F
Deceive G Scalpel H
2.7
A Victori B Earnest C Pervade D Violent E Bashful F
Magnify G Wrought H Horizon
2.7
A Now B Charity C Funeral D Justify E Naughty F
Isolate G Radical H
2.7
A Future B Primate C Mustang D Iterate E F G H
2.7
• Shared C Library − Users of release 2 of ANSI C might like to know
how to use the Shared C Library which is included on the disc but which
does not seem to be documented in the User Guide. Normally, the AOF
file, generated by compiling the C source, is linked with the C ANSI
library file, $.ARM.CLib.O.AnsiLib. This produces an image file which
can be executed directly by *RUNning it. This image file tends to be
quite long as large port-ions of the C ANSI library are incorporated in
it.
2.7
On the C disc, is a file called $.Library.CLib which contains the C ANSI
library in the form of a relocatable module. The interface between the
user program and this Shared C Library module is a small file called
$.ARM.CLib.O.Stubs which simply defines each ANSI library function as a
SWI which is then recognised by the library module.
2.7
As an example of the use, try the following. Mount your working copy of
the C disc and enter directory $.ARM.CBench. Now compile the source file
C.HelloW using the -c option so as not to invoke the linker:
2.7
*CC HelloW -c
2.7
Now link the resulting AOF file with the Stubs library:
2.7
*Link -o HelloW O.HelloW $.ARM.CLib.O.Stubs
2.7
Next load the Shared C Library module:
2.7
*RMLoad $.Library.CLib
2.7
And finally run the program:
2.7
*Run HelloW
2.7
Note that an image file generated in this way is not truly stand-alone
as it needs the Shared C Library module to be loaded in order for it to
run (but then again many programs need the Floating Point Emulator to be
loaded in order to run). A big advantage is that the image file is very
much smaller than it would be if it had been linked with the ANSI
library in the normal way. One can envisage several C programs multi
tasking under RISC-OS, sharing the resources of the Shared C Library.
2.7
It should be noted that the Arthur-specific functions declared in the
ArthurLib header file are not incorporated in the Shared C Library. If
your program uses these functions you must include
$.ARM.CLib.O.ArthurLib at the linking stage. So try the following:
2.7
*CC Balls64 -c
2.7
*Link -o Balls64 O.Balls64 $.ARM.CLib.O.Stubs $.ARM.CLib.O.ArthurLib
2.7
*Run Balls64
2.7
Provided the Shared C Library module is loaded, the program should run
normally. John Morley
2.7
• Sprite Animation − There have been many articles relating to the use
of Sprites on the Archimedes. These have covered the use of PLOT &ED,X,Y
to display a Sprite in its defined colours at point (X,Y) and the use of
a Mask to allow a background to appear through the ‘unused’ parts of a
sprite. They have also shown the use of Exclusive OR plotting using GCOL
11,0 to allow the sprite to be moved over any coloured background.
2.7
The EOR solution to this last problem, of moving a multi-coloured sprite
over a multi-coloured background, does work, but unless a great deal of
thought is given to palette selection, the sprite does not retain its
defined colour during movement.
2.7
Many games will require the facility to define a sprite in specified
colours, with a mask and to move it still retaining those colours rather
than those produced by EOR.
2.7
A solution is to use the standard Move/Display/Erase in a loop but not
to use EOR. The following algorithm does this :
2.7
1 Define the sprite ‘MySprite’ with a mask (using SEDIT on the Welcome
Disk).
2.7
2 Determine the size of ‘MySprite’. This may be known but a SYS call
does it for you.
2.7
LOOP
2.7
3 Determine the position where ‘MySprite’ is to be plotted.
2.7
4 Grab a sprite ‘Temp’ from the screen at this position the same size
as ‘MySprite’.
2.7
5 Plot ‘MySprite’ with the mask.
2.7
6 Plot the grabbed sprite ‘Temp’ to ERASE ‘Mysprite’.
2.7
ENDLOOP
2.7
The following program demonstrates this :
2.7
10 REM > SpritePlot
2.7
20 REM Copyright Ian Smith
2.7
30 REM March 1989
2.7
40
2.7
50 REM An example program to show
2.7
the use of sprites moving
2.7
60 REM across a multi coloured
2.7
background by grabbing an area
2.7
70 REM of screen as a sprite and
2.7
then using it to overwrite the
2.7
80 REM moving sprite.
2.7
90
2.7
100 MODE 15 :REM Works in other
2.7
modes
2.7
110 T$=“Temp” : REM Will be the
2.7
sprite grabbed from screen
2.7
120 M$=“MySprite” : REM A masked
2.7
sprite created with SEDIT
2.7
130 *SLOAD !Sprites
2.7
140
2.7
150 SYS &2E,40,,T$ TO ,,,W,H :REM
2.7
Find size of sprite to grab
2.7
160 : REM W)idth and H)eight
2.7
170 PROCDrawBackground : REM Draw
2.7
a Multicoloured background
2.7
180 PROCTitle:REM and put titles on
2.7
190
2.7
200 REPEAT
2.7
210 REM ****** MOVE ******
2.7
220 MOUSE X,Y,B
2.7
230 SYS &2E,16,,T$,1,X,Y,X+W*2,
2.7
Y+H*4 : REM Grab sprite
2.7
from screen
2.7
240
2.7
250 OSCLI(“SCHOOSE ” + M$ ) :REM
2.7
Select original sprite
2.7
260
2.7
270 REM ****** DISPLAY ******
2.7
280 GCOL 8,0 :REM Now plot it with
2.7
its mask
2.7
290 PLOT &ED, X,Y :REM at the
2.7
mouse position
2.7
300 PLOT &ED,900,800 : REM and
2.7
display it in rectangle
2.7
310
2.7
320 WAIT:WAIT : REM Synchronise
2.7
output
2.7
330
2.7
340 OSCLI(“SCHOOSE ” + T$) :REM
2.7
Now plot the grabbed sprite
2.7
350
2.7
360 REM ****** ERASE ******
2.7
370 GCOL 0,0
2.7
380 PLOT &ED,X,Y : REM at the same
2.7
place
2.7
390 PLOT &ED,1000,800 :REM and in
2.7
its rectangle
2.7
400 UNTIL B=7 : REM 3 buttons
2.7
terminates
2.7
410 END
2.7
420
2.7
430 DEF PROCDrawBackground
2.7
440 GCOL 3 : RECTANGLE FILL 0,0,
2.7
300,300 : REM Just a
2.7
couple of
2.7
450 GCOL 4 : RECTANGLE FILL 50,50,
2.7
50,50 : REM rectangles and
2.7
460 GCOL 12:CIRCLE FILL 800,400,200
2.7
: REM circles
2.7
470 GCOL 5 :CIRCLE FILL 600,300,100
2.7
480 OSCLI(“SCHOOSE ” + M$)
2.7
490 PLOT &ED,75,90 : REM and the
2.7
sprite
2.7
500 ENDPROC
2.7
510
2.7
520 DEF PROCTitle
2.7
530 GCOL 1
2.7
540 RECTANGLE 900-2,800-4,W*2+4,
2.7
H*4+8 :REM Draw rectangles
2.7
550 RECTANGLE 1000-2,800-4,W*2+4,
2.7
H*4+8 : REM in which sprites
2.7
560 PRINT TAB(53,2);“S P R I T E S”
2.7
: REM are displayed
2.7
570 PRINT TAB(52,3);“original
2.7
grabbed“
2.7
580 PRINT TAB(0,1);“SPRITE
2.7
DEMONSTRATION : use mouse
2.7
to move sprite“
2.7
590 ENDPROC
2.7
Comments on the program
2.7
PROCDrawBackgound sets up a background to move over.
2.7
PROCTitle puts text and a couple of rectangles on the screen
2.7
150 uses a SYS call to find the Width and Height of ‘MySprite’. This
is needed so that the right size ‘Temp’ can be grabbed. (See PRM pp
429,433.)
2.7
230 grabs the sprite from the screen using a SYS call. Note the *2 and
*4 to compensate for screen MODE 15. You’ll need to change this for
other resolution modes.
2.7
250 selects ‘MySprite’
2.7
280 selects the Mask Plot option GCOL 8.
2.7
290 plots the sprite at the Mouse selected point
2.7
300 plots the sprite in a rectangle to show its original colours.
2.7
340 selects ‘Temp’
2.7
380 plots ‘Temp’ effectively erasing ‘MySprite’
2.7
390 plots ‘Temp’ in its rectangle. The effect of 390 has an interest
ing side-effect. When you run the program move the sprite over the
rectangle! See what happens!
2.7
The program ‘SpritePlot’ and the sprite file ‘!Sprites’ are on this
month’s disk but you can use the program by keying it in and also
creating a masked sprite in mode 15 using SEDIT and saved as !SPRITES.
2.7
The program can obviously be modified to run in other modes. The flicker
on the sprite could be removed by modifying the program to plot only if
the mouse has been moved. Ian Smith
2.7
• Star-Trader Cheats − Here are some ideas and cheats for
‘StarTrader’. It is an excellent game, all the more impressive when you
consider it is written in BASIC!
2.7
Load the main game and enter the EDIT editor. (The main game file is
‘$.Resouces.StarTrader. StarTrader’.) You can alter as many as the
following as you like to make the game a bit easier to get into;
2.7
Line 290 change to: SUN=1 for a SunBurst
2.7
DEATH=1 for a DeathBlossom
2.7
CELL=1 for a super energy cell
2.7
ENG=3 for the most powerful engines (Note ENG=2 & ENG=1 are available
as well)
2.7
NUMPT=10 for the number of photon torpedoes. Having 10 doesn’t spoil
the display!
2.7
Line 390 change CRD to the number of credits you want (STDA is the
stardate)
2.7
Line 420 change MAXHOL to the size of the hold you want fitted.
2.7
Note: DAMCAP is used in Line 13570 to calculate the remaining hold
capacity.
2.7
PRC() holds the value of each of the tradegoods you are carrying CTOTAL
is the total weight of cargo you are carrying at the moment (also used
in 13570)
2.7
The messages you occassionally get when transporting down to a planet
are held in code. If you want to see them, then type the following
changes in immediate mode.
2.7
LOAD “StarTrader”
2.7
DELETE 0,39349
2.7
DELETE 39560,39580
2.7
DELETE 39640
2.7
DELETE 39650,39690
2.7
39351 DIM CMG$(20)
2.7
39554 FOR T=0 TO 20
2.7
39651 NEXT
2.7
PROCCLUE (If <ctrl-B> is used first, the messages can be sent to a
printer.)
2.7
There is a 50:50 chance of getting a clue on any planet landing. 16
messages have a 95% chance of being called, the other 4 messages only
5%. The rumour sends you to a randomly chosen planet! Some messages are
tradehints, some are adverts for other games(!) and a couple are very
useful clues to the solution of the puzzle.
2.7
The planets on which the segments are found and the code are chosen at
the creation of the universe stage. RUN the game, then immediately save
it. TYPE in CHEAT4 to get a list of planet numbers where the segments
are. CHEAT4 also prints out the code letters. These are held in the
array ZTX()
2.7
10 REM >CHEAT4
2.7
20 DIM PKLR(800),GR(800),ANAME$
2.7
(800),TYP(800),SS(800),PO(800)
2.7
,STARSS(120),PX(120),PZ(120), PC(9),SP(9),PRC(13), UNI(120,12),ZTX(8)
2.7
30 BB=OPENIN(“:1.xxxxx”):REM
2.7
change xxxxx to name of
2.7
SaveGame file
2.7
40 INPUT# BB,SUN,DEATH,CELL,ENG,
2.7
FS, PS,SS,AS,PTD,PSD,DAMCAP,HD, TE,NUMPT,PE,EPS,STDA,CRD,PN,SY
2.7
50 FORT=1TO800:INPUT# BB,PKLR(T),
2.7
GR(T),ANAME$(T),TYP(T), SS(T),PO(T):NEXTT
2.7
60 FORT=1TO120:INPUT# BB,SARSS(T)
2.7
,PX(T),PZ(T):NEXTT
2.7
70 FORT=1TO9:INPUT# BB,PC(T),SP(T)
2.7
:NEXTT
2.7
80 FORT=1TO13:INPUT# BB,PRC(T)
2.7
:NEXTT
2.7
90 FORZ=1TO119
2.7
100 FORT=1TO12:INPUT# BB,UNI(Z,T)
2.7
:NEXTT
2.7
110 NEXTZ
2.7
120 FORT=1TO8:INPUT# BB,ZTX(T)
2.7
:NEXTT
2.7
130 CLOSE# BB
2.7
140 FOR LOOP=1 TO 9:PRINT PC(LOP),
2.7
SP(LOOP)’:NEXT:REM planets
2.7
150 FOR LOOP=1 TO 8:PRINTCHR$(64+
2.7
ZTX(LOOP)):NEXT:REM code
2.7
You get a nice fanfare when you collect a segment. The percentage
chances reported during a scan can be as low as 45% or as high as 90% on
a planet which actually has a segment.
2.7
If you have two drives, it is quite easy to use drive 1 as the GameSave
drive (as in the program above). Just change (input$) in Lines 3770,
4020 and 4050 to (“:1.”+input$). Dave Kent
2.7
• TV output from Archimedes? − It is possible to connect a TV to an
Archimedes, though only in monochrome and via a video. Connect a wire
(co-ax) from a phono plug plugged into the Archimedes mono video socket
to pin 20 (centre core of Co-ax) and any one of the many 0V lines (i.e.
connect the braid screen to 0V) on a SCART plug. This means that it only
works on video machines with a SCART socket on them (if no SCART socket,
then connect to VIDEO IN via a phono or BNC plug). This also means that
you can make demo videos and stuff by taping the pictures. Sound can be
connected to pins 2 and 6, I think, never tried it! (See Archive 2.2 p
6) Does anyone now how to convert the Archie mono out to colour?
Plugging the Archie SCART cable to the video doesn’t work! Oliver
Cornes.
2.7
• Using First Mail − At first, I regarded First Word Plus as a very
ordinary word processor. The need to keep reformatting with <f12> seemed
to be a step backward. However First Mail changes the picture for me.
Here are one or two ideas on how to use First Mail for handling ordinary
day-to-day cor-respondence.
2.7
I “merge from” a file carrying my letterhead. In fact I have a few
different letterheads for different purposes. In addition to the
letterhead my “from” file has the following First Mail commands:
2.7
longdate
2.7
input “address file?”, address
2.7
input “text file?”, text
2.7
includefile dat.address
2.7
Dear
2.7
includefile doc.text
2.7
includefile dat.address
2.7
(The bits in italic that should be in light type. It is not obvious
which the light bits should be; but see the note on p. 206 of the First
Word Plus manual.)
2.7
The system asks me for an address file and then a file containing the
text of the letter, both of which it merges with the letterhead. The
second printing of the address comes after a hard page break. Since I
specify pauses on page breaks, this allows me to remove the letter from
the printer and replace it with the envelope (or sticker) for the second
address to be printed on that. I can cancel this when I do the draft
copy, which I keep for my own files. I save my letter texts in the doc
directory and addresses in the dat directory. This allows me to use the
same name for both if that is more convenient.
2.7
Incidentally I use a brother daisywheel for most of my letter quality
printing; and I have configured the driver to print my letterhead in
bold red. A nice feature of First Word Plus is that you can have several
drivers for the same printer if you give them different names. Not only
that, but with a daisy-wheel you can have two configurations on the same
driver by making the NLQ configuration different from the draft
configuration, though of course, the terms draft and NLQ will have no
real meaning for a daisywheel.
2.7
There are some errors in the Brother driver supplied, by the way; so
check with the manual, especially if you are Danish or are in the habit
of using some of the more obscure symbols. The First Word Plus manual is
a bit vague about full pathnames, too. For instance, to install a
different default printer you have to type, say,
2.7
*copy 1wp.cfg.epson_fx resources.
2.7
1wp.1wp_print
2.7
I find the First Word Plus file window most useful for exploring discs.
If you click on the window exit symbol you get the parent directory.
Clicking on a directory name in the window lists that directory in the
window as well as selecting it in the directory slot. Glyn Emery.
2.7
2.7
We begin a new section this month to help you get to grips with RISC-OS.
When you buy RISC-OS, you get a disc full of information from software
houses (see list below) about how to get their software running under
RISC-OS, but I suspect that because RISC-OS is so new, there will be
lots for us all to learn − hence this column.We really need a volunteer
to be the editor of this corner − someone to whom I can send all the
info and who will then collate it, check it and regurgitate it to me
(preferably via Eureka II for speed). Anyway, Mike Harrison, Matthew
Treagus, Keith Milner and Ting Kuei start us off.
2.7
• Flashing screens − I’ve just got hold of the release RISC-OS User
Guide and noticed that it does not seem to mention the fact that in
modes 21, 24 and 28, the screen blanks when accessing floppies, due to
the high DMA rate. I’m sure many dealers will get calls from worried
users who think that fitting RISC-OS has damaged their machine because
of the screen flashing on and off!
2.7
• Logistix − Logistix users must replace the Floating Point Emulator
in the Library of the Log-istix Disc (version 2.50) with the later one
which is supplied with RISC-OS, i.e. FPE version 2.60. It can also be
found on the ABC Compiler Disc. If this is not done Logistix, will not
run correctly.
2.7
• TWIN − If, like me, you are annoyed at the delay in loading TWIN
when editing programs, especially with BASIC using TWINO8, make an Obey
file that does the following :
2.7
Set Run$Path Ram:,<Run$Path>
2.7
Copy Twin Ram:Twin f~c
2.7
(Ensure that your configured RamFS size is big enough first!). After
running this, Twin will be instantly loaded from Ram Disk. You can of
course also include in the file a *Key command to define your favourite
function key to call Twin, e.g.
2.7
Key 1 |UTWINO8|M
2.7
For BASIC. The |U deletes any crud which may have been on the command
line before you hit <f1>.
2.7
• Virsuses on RISC-OS!!! − I wonder how many people will look at this
in panic. Don’t worry. There is a virus on RISC-OS, even before it is
released, but it is totally harmless. In fact it is quite fun. First, a
brief description of how most viruses work:
2.7
Most business machines load their operating system from disk. So, in
order to ‘virus’ one of these machines, the offending program just
becomes part of the operating system in some way. It copies itself onto
other discs with operating systems on and soon every copy of the OS you
have is “infected”.
2.7
On a sensible computer, such as the Archimedes(!) the operating system
is on ROM, and cannot be altered! Thus if someone decides to write a
virus program, once it is detected, turning the machine off will remove
it. It is, however, possible to install a virus on other files on disc.
This is much more difficult to do, is easier to detect and easier to
remedy. For instance, the !BOOT file is a common file to be found on a
disc, and a virus could conceivably attach onto this, although it would
be very difficult since every !BOOT file is different.
2.7
I will not disclose how the RISC-OS virus installs itself as it will
only encourage people to write viruses. I will say, however, that once
detected, it is ((very simple)) to remove it with no after effects. If
the virus (which actually originates from Acorn!) appears on your disc,
not much actually happensÉ or at least it appears that way. You are
using the desktop as normal and suddenly, a small fish appears on the
screen and swims across, behind all the windows, leaving a trail of
bubbles which rise to the top of the screen and disappear. Several more
fish swim backwards and forwards on the desktop until the machine is
reset. This virus is totally harmless, the only ill effect is to use up
a bit of processor time! In fact, I have installed it deliberately as it
is quite relaxing!
2.7
Another virus we have heard of is the FF8 virus which adds itself to
filetype FF8 files. It displays a message and prevents the affected file
from running on the 13th of the month.This it is a real pain if you are
not careful, i.e. if you forget to turn the computer off before running
a new program! There is a detector program available (downloadable from
area 2 on Eureka II) but it will only check for the existence of the
virus and will not destroy it.
2.7
• Manuals − Q: When RISC-OS is available, does it mean that the
manuals I purchased are outdated or will Acorn publish a cheap edition
to add to it?
2.7
A: The bulk of the PRM remains correct, however there is a wealth of
brand new information and a new PRM will be out in due course, probably
in three volumes!
2.7
The following firms have provided help on RISC-OS compatibility. The
information is on the Support Disc that comes with RISC-OS.
2.7
Abacus Training Ltd
2.7
Ace Computing
2.7
Acorn Computers Ltd
2.7
AVP Computing
2.7
Cambridge Micro Systems Ltd
2.7
Clares Micro Supplies Ltd
2.7
Colton Software
2.7
Dabs Press
2.7
Dixon and Dixon
2.7
Emmerich (Berlon) Ltd
2.7
GEM Electronics
2.7
Intelligent Interfaces Ltd
2.7
Institute of Ophthalmologists
2.7
Lendac Data Systems Ltd
2.7
Lingenuity (Lindis International Ltd)
2.7
Magenta Research Ltd
2.7
Maze Technology
2.7
Meadow Computers
2.7
Minerva Systems Ltd
2.7
Mitre Software Ltd
2.7
Oak Professional Software Ltd
2.7
Silicon Vision Ltd
2.7
Watford Electronics Ltd
• Floppy programs on hard discs − Here’s the best method I’ve come
across of getting floppy programs to run on a HD machine. You need two
FFF type files (or Obey if you want) One called ‘Floppy’ should contain:
2.8
*CON. Drive 0
2.8
*CON. NoBoot
2.8
The other called Hard should be:
2.8
*CON. Drive 4
2.8
*CON. Boot
2.8
If you put these in the library you can then
2.8
*Floppy
2.8
<ctrl-break>
2.8
<shift-break>
2.8
do whatever else
2.8
<ctrl-break>
2.8
*DIR :4
2.8
*hard
2.8
<ctrl-break>
2.8
(This assumes you have a !Boot on your hard disc.) Martyn Lovell
2.8
• Head alignment problems? − If you are getting disc errors and
suspect that the problem might be head alignment, one way of confirming
this is to use the disc copier program that you will find on Share-ware
N¼2. The program does a check of the whole disc to find bad sectors. If
one of the heads is misal-igned, you will probably find that all the bad
sectors reported are on one or other of the heads. Then it’s time to
take it off to your local dealer for repair.
2.8
• Hearsay − If you need to change modem baud rates with ATB3 or ATB0
after calling one remote system and before calling another, you can do
so by using a dial prefix in the modem driver edit screen by putting
“ATB3D” or “ATB0D” as appropriate.
2.8
• Matrix Procedures and Functions − This was prompted by Steve Drain’s
article in Archive 2.1 p.17 where he stated that a numerical method for
the inverse of a square matrix needs a good guess of the inverse and
uses the transposed matrix as a starting point. His excellent program
has been timed to invert a 20 x 20 matrix to 1 part in 10^9 in approx-
imately 10 seconds.
2.8
A good guess or even a desirable result can be ob-tained by a procedure
described below. It calculates an inverse of 20x20 matrix in about 280
centisec-onds giving an error in the non-diagonal elements of the
identity matrix of less than 1 part in 10^6.
2.8
The method used is based on the following. The matrix M to be inverted
is premultiplied by its transposed M‘, giving M’M. The result is
decomposed in a lower triangular matrix L satisfying the identity
LL’=M’M. Then I, which is the inverse of L, can be determined in a
straight forward way. Matrix I’I thus equals the inverse of M’M, and
finally I’IM‘ gives the result wanted. This is correct as can be seen
when premultiplying a vector x by M giving a vector v, and solving for
x.
2.8
Mx=v ==> M’Mx=M’v==> LL’x=M’v ==> I’ILL’x=I’IM’v ==> x=I’IM’v
2.8
In fact, this is the least square solution for vector x, i.e. r
equations with c unknown variables ( r>=c ) are solved using the
criterium that the sum of the squares of the deviations to a solution of
vector x obtains a minimal value.
2.8
The program presented below uses PROC lst_sq_inv to determine the
‘inverse’ Mi of any matrix M. If M is a square matrix then MiM = E and
also MMi = E, E being the identity matrix. As an ‘extra’, the determi
nant of the square matrix M can easily be calculated. To my knowledge
the method is numerically very stable.
2.8
10 REM >Matrix_Inv
2.8
20 :
2.8
30 *********************************
2.8
40 REM Inverting an arbitrary matrix
2.8
50 REM E.D. Engelhardt, March 1989
2.8
60 *********************************
2.8
70 :
2.8
80 REM *** Generate random matrix M,
2.8
col% columns and row% rows
2.8
90 CLS
2.8
100 PRINT‘“ Inverting an arbitrary
2.8
matrix“‘
2.8
110 REPEAT:INPUT“ Rows :
2.8
“row%:UNTIL row%>0
2.8
120 REPEAT:INPUT“ Columns <= rows :
2.8
“col%:UNTIL col%<=row% AND col%>0
2.8
130 CLS:PRINT‘“ Rows : ”STR$row%
2.8
‘“ Columns : ”STR$col%
2.8
140 row%-=1:col%-=1
2.8
150 DIM M(row%,col%)
2.8
160 FOR r%=0TOrow%:FOR c%=0TOcol%:
2.8
M(r%,c%)=RND(1)*SGN(0.5-RND(1)) :NEXT:NEXT
2.8
170 :
2.8
180 start%=TIME
2.8
190 :
2.8
200 REM Determine the ‘least square’
2.8
inverse Mi of M. Result : Mi.M is equal to the identity matrix E.
2.8
If rows = cols also M.Mi = E.
2.8
210 :
2.8
220 DIM Mi(col%,row%):PROClst_sq_inv
2.8
(M(),Mi())
2.8
230 end%=TIME
2.8
240 :
2.8
250 PRINT‘“ Time(centisecs) : ”;
2.8
STR$(end%-start%)‘’
2.8
260 :
2.8
270 PROCprint
2.8
280 END
2.8
290 ————————————————-300 DEFPROClst_sq_inv(R(),Ri())
2.8
310 REM Ri is ‘least square’ inverse
2.8
of R, i.e. Ri.R = E (identity matrix). If rows = cols
also
2.8
R.Ri = E.
2.8
320 REM Dimensions R(v%,h%),Ri(h%,v%)
2.8
==> v% : rows , h% : columns
2.8
330 REM E.D. Engelhardt, March 1989
2.8
340 :
2.8
350 LOCAL RtR(),L(),I(),v%,h%,c%,r%,t%
2.8
360 v%=DIM(R(),1):h%=DIM(R(),2)
2.8
370 DIM RtR(h%,h%),L(h%,h%),I(h%,h%)
2.8
380 :
2.8
390 REM Determine transpose of R
2.8
400 FOR r%=0 TO v%:FOR c%=0 TO h%:
2.8
Ri(c%,r%)=R(r%,c%):NEXT:NEXT
2.8
410 :
2.8
420 REM Calculate square matrix to be
2.8
inverted
2.8
430 RtR()=Ri().R()
2.8
440 :
2.8
450 REM Calc lower triangle L of RtR
2.8
460 FOR c%=0 TO h%:FOR r%=c% TO h%
2.8
470 L(r%,c%)=RtR(r%,c%):t%=c%-1
2.8
480 IF t%>=0 FOR t%=t%TO0STEP-1:
2.8
L(r%,c%)=L(r%,c%)-L(r%,t%)*
2.8
L(c%,t%):NEXT
2.8
490 IF r%>c% THEN L(r%,c%)=L(r%,c%)
2.8
/L(c%,c%) ELSE L(r%,c%)=SQR L(r%,c%)
2.8
500 NEXT:NEXT
2.8
510 :
2.8
520 REM If R is square (rows = cols)
2.8
its determinant equals the product of the diagonal elements of L. The
determinant of RtR equals the
2.8
square of the determinant of L.
2.8
530 :
2.8
540 REM Invert triang matrix L to I
2.8
550 FOR c%=0 TO h%:FOR r%=c% TO h%
2.8
560 FOR t%=c% TO r%-1:I(r%,c%)=
2.8
I(r%,c%)-L(r%,t%)*I(t%,c%):NEXT
2.8
570 IF r%>c% THEN I(r%,c%)=I(r%,c%)
2.8
/L(r%,r%) ELSE I(r%,c%)=1/L(r%,r%)
2.8
580 NEXT:NEXT
2.8
590 :
2.8
600 REM Determine transpose L of
2.8
inverse triangle I
2.8
610 FOR r%=0 TO h%:FOR c%=0 TO
2.8
h%:L(c%,r%)=I(r%,c%):NEXT:NEXT
2.8
620 :
2.8
630 REM Inverse matrix of R is Ri
2.8
640 RtR()=L().I():Ri()=RtR().Ri()
2.8
650 :
2.8
660 ENDPROC
2.8
670 ————————————————-680 DEFPROCprint
2.8
690 VDU 14
2.8
700 PRINT“ ******** Elements Matrix”‘
2.8
710 FOR r%=0 TO row%:FOR c%=0 TO
2.8
col%:PRINT M(r%,c%):NEXT:PRINT:NEXT
2.8
720 PRINT“ ******** Elements inverse
2.8
Matrix“‘
2.8
730 FOR r%=0 TO col%:FOR c%=0 TO row%
2.8
:PRINT Mi(r%,c%):NEXT:PRINT:NEXT
2.8
740 DIM E(col%,col%)
2.8
750 E()=Mi().M()
2.8
760 PRINT“ ******** Elements of
2.8
Inverse_Matrix.Matrix“‘
2.8
770 FOR r%=0 TO col%:FOR c%=0 TO col%
2.8
:PRINT E(r%,c%):NEXT:PRINT :NEXT
2.8
780 VDU 15
2.8
790 ENDPROC
2.8
• Repton 3 − There is a bug in screen E of WORK, so to get past it,
you will need to know the next password which is COUNTER.
2.8
• Three floppies under Arthur − Here is a solution to the problem of
three floppies on the desktop (Archive 2.7.12). Enter the following in a
file called ‘Desktop’ in the library directory, use *BUILD or a text
editor such as Twin to enter it.
2.8
*BASIC
2.8
LOAD “DESKFS:DeskTopMgr2”
2.8
11 OSCLI “DESKFS”
2.8
12291 IFfloppies%>2 THEN PROCsys_
2.8
addtoiconbar_left(“floppy2”,
2.8
“disc3.5”,&301A,icon_fgcol,
2.8
icon_bgcol, icon_width%)
2.8
28600 DEFFNselect_floppy2
2.8
28610 =0
2.8
28620 DEFFNmenu_floppy2
2.8
28630 PROCsys_definetextmenu
2.8
(“floppy2”,“floppy :2”,“Format”)
2.8
28640 =0
2.8
28650 DEFFNaction_floppy2
2.8
28660 =FNfilehandler_open_dir
2.8
(“-adfs-:2”,“Floppy :2”,0)
2.8
28670 DEFFNmenuselect_floppy2
2.8
28680 CASEitem0% OF
2.8
28690 WHEN0: PROCfilehandler_
2.8
formatfloppy(“2”)
2.8
28700 ENDCASE
2.8
28710 =0
2.8
RUN
2.8
When you wish to use the three floppy version of the desktop, instead of
typing *DeskTop, enter */DeskTop, this will ensure that the upgrade
program in the library directory is run instead of activating the
desktop in the normal way.
2.8
Unfortunately, there is no way of permanently updating the desktop so
that you can power up into the desktop with three floppies since it is
held in ROM which obviously cannot be changed.
2.8
If you wish to power up in the desktop with three floppies then you
could do the following:
2.8
*Configure Boot
2.8
*Configure Language 0
2.8
and setup a !Boot file as follows:
2.8
*/Desktop
2.8
ensure that when you switch the computer on, your boot disc is in drive
0 (or your default drive as configured with *Configure Drive) and the
desk top will appear after a short delay.
2.8
N.B. No damage will be caused to the disc in powering up with the disc
in the drive since the latch will be across the disc surface and the
disc heads not in contact with the disc surface.
2.8
The other solution is to upgrade to RISC-OS which can support up to four
floppies! Darren Jackson
2.8
• Zarch − To put Zarch onto a hard disk, use....
2.8
*UNPLUG SoundChannels
2.8
*ZARCH
2.8
When error occurs type the following,
2.8
*RMREINIT SoundChannels
2.8
*SAVE :4.ZARCHcopy 8000+20800
2.8
*BUILD :4.ZARCHgo
2.8
LOAD ZARCHcopy
2.8
MEMORYA E1AC E1A0F00E
2.8
CHANNELVOICE 1 6
2.8
CHANNELVOICE 2 7
2.8
CHANNELVOICE 3 8
2.8
CHANNELVOICE 4 9
2.8
GO 1FF30
2.8
Then press <escape>. Type ZARCHgo to run the copy from hard disk. Tony
Porter
2.8
2.8
First Word Plus Extended Dictionary
2.8
I was asked to review the First Word Plus Extended Dictionary which is
available from Science Frontiers. It seems unfair to review it in only
one paragraph, but Paul’s maxim is, “Space in Archive is at a premium,
so say what is worth saying as briefly as possible, then shut up!”
(Well, that’s the jist of what I say! Ed.)
2.8
First Word Plus Extended Dictionary comprises an 80,000 word dictionary
which replaces that in the Acorn package, and three specialized
supplementary dictionaries covering computer terms, geographical
locations and Christian names. It is an entirely competent package,
though necessarily not the most fascinating in content. If you need more
words in your dictionary, buy it, but if you need to work with large
documents, do not load it, as bigger dictionaries do take up more space.
2.8
FWP Extended Dictionary costs £6.95 (£6.50 from Archive) and is produced
by Science Frontiers.
2.8
From FWP to DTP?
2.8
Although it is not strictly the business of the First Word Plus column,
I took a good look at the Desktop Publishing program when visiting the
Acorn stand at the Which Computer? Show. It should be available a few
weeks after RISC-OS and is reported to be “finished” and about to go
into production. However, it was apparently not the “finished” version
at the show. My informant assures me that the production version will be
even better, which should certainly be good indeed. Even the present
version has a ‘secret’ feature which is quite impressive and even Apple
cannot match it.
2.8
<ctrl−A> Solution?
2.8
I have discovered why my “<ctrl-a> makes a bleep” modules reported in
Archive 2.5 p. 18 absolutely refused to work: the answer is on the top
of page 34 of the Programmer’s Reference Manual: never use OS_WriteC
routines when you have intercepted an interrupt. The solution (but don’t
hold your breath) is to insert a <ctrl-g> into the input buffer. This
works absolutely perfectly − except in FWP, where it is interpreted as a
call to read the ruler!!
2.8
No-one else has produced a solution which actually works, so the small
prize is still unclaimed.
2.8
Shareware disk N¼6
2.8
We get a lot of enquiries about printer drivers. The problem is that we
do not have that many different kinds of printer, so cannot help much.
Besides, printer drivers are (however necessary and satisfactory a
solution they may be) a pain and a bore, except when they are to drive
the printer you use. I am trying to compile a disk of all the contrib
uted “goodies”, especially printer drivers and related information and
ideas. If you have a contribution, please let me have it in the next
couple of weeks. We have printer drivers for: Taxan-Kaga KP810 = Canon
PW 1080; Citizen 120; Epson LX800 and LQ500; Star LC10 and NL10;
Panasonic KXP1080; H-P DeskJet. Quite a few of these have interesting
variants and associated ideas which may be useful for doing the special
things you want to do with your printer.
2.8
Once the shareware disk is available, printer driver enquiries will be
at the bottom of the pile!
2.8
(Mike sent me a pre-release version of this which I published as
Shareware N¼6, thinking it was the finished article. Ooops! We will
continue to supply N¼6 as it is and then offer free up-grades when the
final version is ready. Sorry about that! Ed.)
2.8
Two related matters
2.8
• If you get the monthly disk, you will probably have installed the
IntModule from Steve Hoare (Archive 2.6, p. 44), and you will agree with
me that it is quite the best thing that has happened to First Word Plus
since its launch! I am sure that my life-expectancy has been increased
by being able to access the “*” commands we all love (and hate). If you
have not installed it, copy the IntModule to your 1st Word startup disk,
then modify !boot by adding lines 23 and 26 as follows:
2.8
23 *rmrun IntModule
2.8
26 *Interrupt 15
2.8
Now if you press <ctrl-o>, the screen goes bright blue and gives you a *
prompt. Create your directories, mount disks or whatever, then just *
<return> and you are back. Wonderful. If you do not get the disks, more
fool you, this one was worth a year’s subscription, but it will be on
the proposed “shareware” disk.
2.8
• Just who do you think we are? Not very different from you is the
answer, I guess. I suspect that most of the contributors to Archive are
either people who enjoy computers as a hobby which can be useful, people
who use computers as part of their work, but are not professionals in
computing, or students or teachers of computing. I am actually a vet.
who does human genetics and immunology research, approaching fifty, bald
and paunchy! The point is, please do not expect too much from us/me. I
actually took this column on when a broken collar-bone got in the way of
decorating! Sadly, bones healÉ
2.8
Two quickies
2.8
• If you have more than one sprite in a file, FWP only loads the first
sprite.
2.8
• There is a funny bug in the spelling list : FABRICATION is flagged
as wrong, but it appears when you browse. To add confusion, when you ask
to guess, it comes up with faArication, which is unbrowsable!! Thanks to
Colin Garlick. A review of letters received earlier reveals that the
problem is more widespread than this: Kenneth Gardner rep-orts that the
same (?) bug affects fable, fabric, -ate, -ated, -ation, fabulous, -ly,
fab, haar, maar, nascelle, oaf, zag. Kenneth provides more data on
making merged supplementary dictionaries, but the problem is obviously a
bug. Over to you Acorn!
2.8
FWP and RISC-OSÉ
2.8
The support disk which comes with RISC-OS has the necessary instructions
for conversion and the files. It is in the Acorn directory.
2.8
It may be easier to have Edit installed and the mode set to 0 before you
start. Then you can have a decent RAMfs space for the copied files
(assuming you do not have two drives). You can keep the instructions in
sight this way.
2.8
Éand the IntModule
2.8
It is all quite smooth, but if you want the splendid IntModule facility
to give you access to the OS, it is a bit more complicated. Edit has no
“load” command. You load things by grabbing their icons and dropping
them on the installed Edit icon. But it is not obvious how to get at the
“Obey” files in the !1stWord+ directory from the desktop. The secret is
to hold down shift while clicking on the !1stWord+ directory. You should
be a bit careful about what you do, so make a backup before mucking
about. Now edit it as follows:
2.8
a) (This is most important.) Rename the !Run file you got from the
Support Disc as, e.g. !RunAcorn.
2.8
b) Insert tthree lines before that beginning “run” (next to last) (the
third line is optional − it turns the caps lock off)
2.8
rmload $.intmodule
2.8
interrupt 15
2.8
fx202,48 REM
2.8
c) Save as !Run
2.8
d) Check that the file type is obey. If not, get an OS prompt by
pressing f12 on the desktop and “Setfiletype !run obey”.
2.8
e) Remember to copy IntModule onto the disk in directory $.
2.8
It should work, accessing the OS when <ctrl-O> is pressed, though I get
a white border around the top and right after going to the OS but it
seems to go away, though.
2.8
I suspect there are a few missing twiddly bits about ensuring that the
correct directory names are used, so I still have some reading to do.
More next month!
2.8
It also happens that you can edit obey files in FWP, and further, FWP is
not squeemish about loading the “Obey” files from an application
directory. If you do this you will certainly have to set the filetype.
2.8
First Mail
2.8
Here are a couple more tips on 1st Mail from Glyn Emery:
2.8
Mail merging normally means sending the same, or very slightly differ
ent, letters to a number of recipients. I recently had occasion to turn
this process on its head and send several different letters to the same
recipient; but I found 1st Mail up to the task. The occasion was that I
had to write reports on a batch of candidates, which, for the conveni
ence of his filing system, I prepared in the form of a batch of separate
letters all addressed to the administrator involved. To print them I
prepared a “merge from” file as follows:
2.8
read text
2.8
display “text letter started”
2.8
includefile letterhead
2.8
includefile dat.administrator
2.8
Dear Mr Administrator
2.8
includefile doc.text
2.8
Yours sincerely
2.8
display “letter finished”
2.8
repeat
2.8
“text” here is used as a 1st Mail keyword. The file “letterhead”
incorporates the date. I put a hard page break just before the repeat
command to make the sheet-feeder on my printer pick up the next piece of
A4. The “display” commands were put in during development and proved to
be too confidence-giving to be deleted. The file dat.administrator is
the administrator’s address.
2.8
The reports, together with a covering letter were prepared as separate
files; and a datafile was prepared listing the file names. This was
saved in the dat. directory, not forgetting to switch off WP mode before
saving it. If you don’t switch off WP mode the merge tends to “hang”. I
don’t know why.
2.8
The second point is that I have incorporated Steve Hoare’s IntModule
(Archive 2,6 p44) into the libraries of my letter-writing discs.
Unfortunately Steve’s suggestion to use <ctrl-@> does not quite work for
me, because the £ key seems to return ASCII 0 in the First Word Plus
context, presumably in order that different codes for £ can be included
to satisfy different printers. Steve, being in America, probably had no
occasion to notice this. What I did in the end was to include
2.8
*RMLoad %.IntModule
2.8
*Interrupt 205 1stMail
2.8
into the startup program for First Word Plus, and
2.8
*RMLoad %.IntModule
2.8
*Interrupt 205 1stWord+
2.8
into the startup program for 1stMail. I can then use the “insert” key to
toggle between the two, and save quite a lot of keystrokes in doing so.
Notice that I had to use % in the RMLoad command but not in the
Interrupt command because % appears in my Run$Path but not in my
File$Path.
2.8
An interesting application for FWP
2.8
Dave Livsey
2.8
Those of you who, like me, have to report on the progress of large
numbers of individuals of various levels of ability (i.e. teachers!) and
are the proud possessors of an Archimedes and First Word Plus now have
the means to reduce the increasingly onerous task of reporting, imposed
by the introduction of ‘records of achievement’ (ROA). (If you do not
have First Word Plus, or something better, you deserve all the hard work
you have to do!) Using First Word Plus, it is fairly easy to set up a
‘Mail merge’ which will print out the documents required for the ROA.
2.8
The clue to doing this lies in the example mail-merge letter on the
First Word Plus disk. As with most problems, there are probably many
(or, at least, a few) different solutions − this is one. I hope it will
help reduce your load as much as it has mine!
2.8
In all that follows, the underlined words below are supposed to be in
light type which I am unable to print in Elite type. The page numbers
refer to the First Word Plus handbook.
2.8
In outline, you will need to set up four files: a command file, a data
file, a file containing the com-ment bank and the ‘main’ file (which
corresponds to the letter in the mail-merge example).
2.8
The command file (called ‘command’): This needs to contain the informa
tion which indicates the location of the data file (see below), any
individual input to the ROA document (‘input’ typed in ‘light’ type
p.165 − 169 ) and a reference to the basic form as an ‘includefile’
statement. The WP mode can be left switched on when creating this file
and saving it.
2.8
The data file (‘formdata’) must be created in the dat. directory and
contains only the data you wish to be inserted into the final document
as it is printed and is simply a list of names (firstname, secondname),
sex (He/She), tutor group (or Form, or whatever cockeyed system your
educational establishment has decided to inflict on you), date and any
other required information. As pointed out in the handbook, each item of
data must be separated from the next by a comma. There is also a problem
of commas in an item of data but this is catered for by enclosing them,
as explained on p.165. A specimen layout could be as shown :
Fred,Bloggs,He,4Z,Nov 1988,Swahili
2.8
Note that the data fields are comma separated fields and may include
spaces (p.165). This file must be created in non-WP mode and the mode
left switched off when saving; ignore the pop-up reminder which appears
when you try to save the file.
2.8
The comment bank file (‘ROA’), obviously, contains all the comments
which you may wish to make about any group of students. Each comment is
prefixed by a suitable identifier e.g. K1. In order to be able to use
these comments, each identifier must be set up as a keyword (p.163) by
preceding it with ‘setval’ in light type e.g.
2.8
setval K1, “name1 is a complete idiot when it comes to practical work.
sex is a complete liability as sex has 11 thumbs on two left hands.”
2.8
Note the <,> and the <“>. I found that it was easier to type the comment
with the WP mode switched on and then to switch the WP mode off and move
all the text onto one line. The WP mode was then switched on again as
the document does not print out correctly otherwise.
2.8
The setval definition seems to need all the text on one line but as this
can be 160 characters long, that is not too much of a problem. These
definitions can also contain key words, in light type, for insertions
from the data file into the final document. This is useful as it means
that you can specify he or she along with the name in the data file.
N.B. Changing the ruler turns off the ‘light’ type causing the defini
tions and insertions to be ignored in the final print-out.
2.8
The final file (called ‘form’); the document you are going to print,
contains very little other than keywords spaced out as is appropriate
for your ROA. The first line must be a read statement which, being a
keyword is in light type. Following this is a list of fields in ordinary
type and in the same order as in the data file. The rest of the file is
mainly spaces preceded by a keyword placed where you want your printing
to be done. Eg.
2.8
read name1,name2,sex,date,tutor, subject (reads from ‘formdata’)
2.8
name1, name2 tutor subject date
2.8
includefile ROA (this reads in the comment bank)
2.8
name1 K1 (prints “Fred is an idiot .....”)
2.8
sex C3 (prints in the comment on comprehension)
2.8
sex I1 (prints in the comment on intelligence) etc.
2.8
This file will, of course, need the WP mode swit-ched on in order to
retain all the formatting infor-mation which is necessary for the
automatic form-atter to work when insertions are made in the text.
2.8
The ROA is printed out by clicking on ‘form’ and ‘formdata’ (from the
doc. directory) using the mail-merge facility on the First Word Plus
disc. Full details of this are given in the Handbook.
2.8
Font Fiddling on First Word Plus
2.8
Reg Dalton (& Steve Bass)
2.8
Reg tells us the saga of creating character sets for First Word Plus and
his NEC P2200. A sample printout is shown opposite, and the programs and
printer drivers are on the program disc and downloadable from Eureka II.
2.8
In an earlier edition of Archive (1.12 p 7) was printed a short routine
to convert the extra fonts, supplied on the Master Welcome disc, from
BBC to Archimedes format. On the face of it, this looked as if it would
be a useful little routine but there was a problem; only half of the
character set was defined. i.e. characters 32 to 126. My friend Steve,
in his wisdom, decided that one of the fonts (7by8) looked very good
with First Word Plus and decided to redefine the rest of the characters
to match the ones already done.
2.8
The next step in the story was when I foolishly mentioned that it would
be quite simple to set up First Word Plus to utilise the IBM graphics
available in one of the alternative character sets within the printer we
both had (NEC P2200). We then decided that redesigning the fonts using
the Master was not the way to do this, mainly because the fonts would
then have to be converted to Archimedes, so we converted the CHARDES
program, which was mainly in BASIC, to a form that would save fonts in
the correct format and also run with the Archimedes mouse.
2.8
The problem of modifying the program to work on the Archimedes was not
too difficult by even an amateur programmer’s standards but to make it
save the font in its correct form for the Archimedes proved more
problematical. A number of abortive attempts were made to rewrite the
save font routine but each time nothing was achieved except making the
computer’s character set look like hieroglyphics. Eventually, it all
fell into place and we had a working program.
2.8
We then decided that a program for transposing characters within the
character set itself might not be a bad idea. This was written fairly
speedily, but then the next task was to create the printer driver for
First Word Plus. This marathon is usually achieved by modifying an
existing wordprocessor/printer driver file, which involves changing the
relevant values for the various functions listed within the file, e.g.
superscript, subscript, nlq etc. After this fairly simple part comes the
task of entering all the codes to achieve the extra characters which
cannot enter from the keyboard. For characters 32 to 127 this was
obviously quite simple as all that was needed in this instance was each
character’s number, but it was soon noticed by both of us that the
characters between &80 and &9F (decimal 128 to 159) were not defined by
the existing list. After an abortive attempt to define these characters,
and failing to get them to install, it was decided that we would have to
discard 32 (yes a whole 32) of the characters so lovingly designed by
Steve.
2.8
Notes on the font fiddling programs
2.8
(These refer to programs on the monthly disc.)
2.8
1 !BOOT is the program for interchanging the position of the
characters.
2.8
2 After running the above program, the Acorn Character Designer
Program (modified for use on the Archimedes), Chardes_C, can be entered
and 1 above repeated as many times as necessary.
2.8
3 The modified Printer driver for 1WP is in the CFG directory.
2.8
4 The modified Printer driver hex file for 1wp is in the HEX
directory.
2.8
5 Before booting the disc, the font style to be modified must first be
loaded e.g. by using *NEC_Afont.
2.8
• External drive hang-ups − If you have an external 5.25“ drive
configured and it is not kept on-line (i.e. it is switched off) then the
machine hangs up if the ADFS is searching for a named disc which is not
in drive 0 at the time that the command was issued, e.g. when attempting
to copy file(s) from one 3.5” disc to another. The solution appears to
be either always have the external drive switched on, or to configure it
out of the system during periods when it is switched off.
• GWBASIC to BBC BASIC − I wanted to convert a GWBASIC program to a
BBC BASIC one, but both BASIC’s store programs with the keywords
tokenised. Therefore I needed the equivalent of the *SPOOL command. The
answer seems to be that from GWBASIC either:
SAVE “filename”,A
or
LIST ,“filename”
Both give a version of the listing which, when ported across via
putfile, can be *EXEC-uted.
• Mouse problems − I had a problem with my mouse. Sometimes when I
moved the mouse down, the pointer moved UP. At other times it worked
perfectly. I tried everything − including measuring the electronics
inside the mouse, and inside the keyboard, adjusting the sensitivity and
cleaning the inside and outside of the mouse. Finally I discovered that
the problem was a broken wire in the cable out from the mouse. Odd
Bakken
2.9
• NEC multisync modifications − With a NEC multisync II monitor, I
found that the horizontal width of the picture was not optimal. There
was a black border on each side of the picture and, in modes 18-20, the
picture was even smaller, making the letters a little hard to read. I
called the local dealer and got a copy of their service manual. You can
adjust the horizontal size with coil L505. I got some improvement by
removing the core of the coil but not enough. So I shorted the coil
completely (after consulting the dealer, who said it would not harm the
monitor). By doing this I got a 10% wider picture. (I still have the
distortion of the top lines in mode 18-20.) Odd Bakken
2.9
• OS_PrettyPrint − There has been very little in the literature about
the use of OS_PrettyPrint to avoid word wraparound in, for example, the
preparation of instruction notes at the beginning of a program. (You can
use SYS &44 instead of writing the full command). All that is needed is
a simple BASIC program such as :
2.9
10 SYS &44,“<Block of words>”
2.9
20 PRINT;“ ”;:REM Insert space
2.9
or 20 PRINT:REM New Line
2.9
30 SYS &44,“<Continuation of
2.9
text>“
2.9
40 PRINT;“ ”; etc.
2.9
The text in line 30 continues from the point where it ended in line 10.
Unfortunately the OS command strips the leading and trailing spaces from
the block of text. The PRINT statements are therefore necess-ary to
separate the end of the text in line 10 from the beginning of the text
in line 30 or to force a new line. The word block length has the
standard BASIC line limitation which amounts to roughly three lines of
text in the 80 chars/line modes. The command works in any mode and by
judicious placing of PRINT and COLOUR statements you can have sections
of the text or even single words in colour.
2.9
• Pipedream and the LC10 − To print in colour on a Star LC 10 colour
printer, if Pipedream is config-ured with a printer driver which
includes the follow-ing codes, the various printing styles available on
the Star LC 10 C can be selected when the printer is switched on, and
printed in colour.
2.9
On Off Description
2.9
H1 27 114 1 27 114 0 Red Text
2.9
H2 27 114 2 27 114 0 Blue Text
2.9
H3 27 114 3 27 114 0 Violet Text
2.9
H4 27 114 4 27 114 0 Yellow Text
2.9
H5 27 114 5 27 114 0 Orange Text
2.9
H6 27 114 6 27 114 0 Green Text
2.9
• Pipedream line spacing − (Colton Software’s reply to a request for
1.5 line spacing on Pipedream) Pipedream knows only integral line
spacing; single, double etc, but the line spacing on the printer can be
set independently by sending out some codes with the printer-on string
(PON). For example, PON ESC “2” would give 1.5 line spacing on
Epson compatible printers.
2.9
• Multi Sync Owners! Out here in New Zealand, the average multisync
monitor costs about £60 more than the standard Acorn monitor. As a
result around 60-80% of Archimedes owners have multisync’s. I haven’t a
clue as to why they are so much dearer in the U.K. but suggest that
someone somewhere is making a great deal of money! Most of the programs
available don’t provide a multisync option which is a real shame as that
extra 256 pixels make all the difference. I’ve tried to convert some
programs but haven’t had much luck except for Render Bender.
2.9
To convert Render Bender proceed as follows:
2.9
Make a new backup of your Render Bender System Disc. Label it “Render
Bender Modes 15 & 21” or somesuch. Enter BASIC and load the main program
“!RENDER.RENDER”. Change or add the following lines.
2.9
60 DIM loadadd &F100,sb1%32*1023
2.9
:org=loadadd+&A100
2.9
2550 XRES=640:YRES=256:SC%=100:
2.9
DES=1000:IND=1.5:SKYCOL=13
2.9
:SKYDEP=600:AVE=1:SHAD=1:SHGR=0
2.9
2950 IF YRES=256 AND SCRADD%<=
2.9
&1FB0000 YRES=512:PROCbox
2.9
(17,16,14,2,“HIGH*RESOLUTION”
2.9
,14,0):ENDPROC
2.9
2960 YRES=256:PROCbox(17,16,14,2,
2.9
“LOW*RESOLUTION”,14,0):ENDPROC
2.9
3981 IF RES=320 THEN XRES=640:
2.9
YRES=256
2.9
13590 vars!xlim=XL:vars!ylim=YL
2.9
:vars!reso=XRES
2.9
14010 A$=LEFT$(name$,8):A$=A$+
2.9
STR$FILFR%:IF YRES=256 ENS%
2.9
=&28000 ELSE ENS%=&50000
2.9
14090 XL=XRES/SIZE%:YL=YRES/SIZE%
2.9
:PROCcoeffin
2.9
14110 IF YRES=256 MODE15 ELSE MODE21
2.9
14190 IF YRES=256 MODE15 ELSE MODE21
2.9
14280 XL=XRES/SIZE%:YL=YRES/SIZE%
2.9
:PROCcoeffin:SCROFF%=1
2.9
:PROCisflooron
2.9
14290 IF YRES=256 MODE15 ELSE MODE21
2.9
15150 IF YRES=256 PROCbox(17,16,14,2,
2.9
“LOW*RESOLUTION”,14,1)ELSE PROCbox
2.9
(17,16,14,2,“HIGH*RESOLUTION”,14,1)
2.9
11320 GCOL63 TINT 255:VDU5:IF
2.9
YRES=256 PRINTTAB(0,31);“Click
2.9
Mouse“ ELSE PRINTTAB(0,62);
2.9
“Click Mouse”
2.9
14380 GCOL63 TINT255:IFYRES=256
2.9
PRINTTAB(0,31);“Time taken ”;
2.9
:PROCtime(TI) :GCOL 25:PRINT;
2.9
“ Click mouse” ELSE PRINTTAB(0,62);“Time taken ”; :PROCtime(TI):GCOL 25:
2.9
PRINT;“ Click mouse”
2.9
SAVE “:0.$.!RE*.RENDER”
2.9
Then to modify the Picture Compressor
2.9
$.!RE*.UTIL*.PICCOMP
2.9
*BASIC
2.9
*LOAD :0.$.!RE*.UTIL*.PICCOMP 8F00
2.9
*ACCESS :0.$.!RE*.UTIL*.PICCOMP WR
2.9
!&90C0=&E3520015
2.9
!&90C4=&03A0B805
2.9
!&92F0=&E3500015
2.9
!&92F4=&03A08805
2.9
*SAVE :0.$.!RE*.UTIL*.PICCOMP 8F00+534
2.9
*SETTYPE :0.$.!RE*.UTIL*.PICCOMP &FFA
2.9
To modify the Animator
2.9
*BASIC
2.9
LOAD“:0.$.!RE*.UTIL*.ANIROUT”
2.9
140DIM buff &50000,DUM 1:anipo%=DUM
2.9
+&6000:PROCboot:!anipo%=0
2.9
1371IF !mode=21 length%=&50000
2.9
2251IF MODE=21 length%=&50000
2.9
SAVE “:0.$.!RE*.UTIL*.ANIROUT”
2.9
Finally to get Render Bender going you need a new startup file
2.9
*BUILD :0.$.Rend21
2.9
*ECHO <22> <21>
2.9
*SET RENDER :0.$.!RENDER
2.9
*set OBEY$DIR adfs::0.$.!RENDER
2.9
*set FROM$DESK 0
2.9
*SET RendHard1 adfs::4.$.GRAPHICS.
2.9
!Render \ or your path here
2.9
*SET HardRoot $
2.9
*RMLOAD <RENDER>.Utilities.FSLOAD
2.9
*RMLOAD <RENDER>.Utilities.PicComp
2.9
*BASIC <RENDER>.START
2.9
<Escape>
2.9
*SETTYPE :0.$.Rend21 &FFE
2.9
Then to run Render Bender using:
2.9
*CO. SCR. 320K
2.9
<ctrl-break>
2.9
*:0.$.Rend21
2.9
All this is supplied on the monthly program disc as a series of exec
files so to modify Render Bender you just do this (where <comment>=just
that!)
2.9
<insert Render Bender Disc>
2.9
LOAD“:0.!RENDER.RENDER”
2.9
<insert program disc and *MOUNT or
2.9
use winnie>
2.9
*EXEC Rendermods.RendMods
2.9
<insert Render disc and *MOUNT>
2.9
SAVE “:0.$.!RENDER.RENDER”
2.9
LOAD “:0.!RENDER.UTIL*.ANIROUT”
2.9
<insert my disc and *MOUNT or use
2.9
winnie>
2.9
*EXEC Rendermods.AniMods
2.9
<insert Render disc and *MOUNT>
2.9
SAVE “:0.!RENDER.UTIL*.ANIROUT”
2.9
COPY Rend21 across to $ <On Render
2.9
Disc!>
2.9
*WIPE $.!RE*.U*.PICCOMP F~C <get rid
2.9
of old PicComp>
2.9
COPY PicComp across to $.!RENDER.
2.9
UTILITIES <On Render Disc!>
2.9
then you should be ready to go!
2.9
• Eigenvalues of a matrix − The following program is meant for readers
who are interested in the determination of eigenvalues of a matrix. It
is based on the idea that the eigenvalues of a matrix do not change by a
similarity transformation. Decomposing a square, symmetric matrix S in
its lower and upper triangular forms (L and U respectively satisfying
LU=S) gives a new matrix UL having the same eigenvalues as S, since UL =
(U^−1)ULU. It can be proved that by repeating this process, a matrix is
obtained containing zero elements, except for the eigenvalues residing
on the main diagonal.
2.9
Consider an arbitrary matrix M, having a number of rows equal to or
greater than its number of columns. Then M’M (M‘ standing for transposed
of M) is a square, symmetric matrix having the same eigen-values as M.
Some of these values may equal zero indicating that the dimensionality
of M is smaller than its number of columns. Or in other words, the
matrix spans an x-dimensional space, where x equals the number of non-
zero eigenvalues of M.
2.9
10 REM >Eig_values
2.9
20 :
2.9
30 ********************************
2.9
40 REM Eigenvalues of an arbitrary
2.9
50 REM matrix. E.D. Engelhardt,
2.9
March 1989
2.9
60 ********************************
2.9
70 :
2.9
80 PROCinit
2.9
90 :
2.9
100 PROCmenu
2.9
110 :
2.9
120 PROCinput
2.9
130 :
2.9
140 start%=TIME
2.9
150 PROCmain
2.9
160 end%=TIME
2.9
170 :
2.9
180 PROCprint
2.9
190 END
2.9
200 ————————————————
2.9
210 DEFPROCinit
2.9
220 @%=&0A0A:CLS
2.9
230 ENDPROC
2.9
240 ————————————————
2.9
250 DEFPROCmenu
2.9
260 OFF
2.9
270 PRINTTAB(31,12)“EIGENVALUES”‘
2.9
280 PRINTTAB(27,14)“[1] Random matrix”
2.9
290 PRINTTAB(27,15)“[2] Fixed demo
2.9
5x4 matrix“
2.9
300 PRINTTAB(27,16)“[3] Fixed demo
2.9
4x4 matrix“
2.9
310 ENDPROC
2.9
320 ————————————————
2.9
330 DEFPROCinput
2.9
340 while=TRUE
2.9
350 WHILE while
2.9
360 CASE GET$ OF
2.9
370 WHEN “1”:while=FALSE:ON
2.9
380 REM Generate random matrix M,
2.9
col% columns and row% rows
2.9
390 REPEAT:
2.9
INPUT‘“ Rows : ”
2.9
row%:UNTIL row%>0
2.9
400 REPEAT:INPUT‘“ Columns
2.9
<= rows : “col%:UNTIL col%
2.9
<=row% AND col%>0
2.9
410 CLS:
2.9
PRINT‘“ Rows : ”STR$
2.9
row%‘“ Columns : ”STR$col%
2.9
420 row%-=1:col%-=1
2.9
430 DIM M(row%,col%)
2.9
440 FORr%=0TOrow%:FORc%=0TOcol%
2.9
450 M(r%,c%)=RND(1)*SGN(0.5-
2.9
RND(1))
2.9
460 NEXT:NEXT
2.9
470 :
2.9
480 WHEN “2”:while=FALSE:ON
2.9
490 REM *** Fixed data for demo
2.9
5x4 matrix having one zero
2.9
eigenvalue
2.9
500 CLS:PRINT‘“ Rows : 5”
2.9
‘“ Columns : 4”
2.9
510 row%=4:col%=3:DIM M(4,3)
2.9
520 M(0,0)=4:M(0,1)=3:M(0,2)=2:
2.9
M(0,3)=1
2.9
530 M(1,0)=2:M(1,1)=4:M(1,2)=1:
2.9
M(1,3)=3
2.9
540 M(2,0)=6:M(2,1)=7:M(2,2)=3:
2.9
M(2,3)=4
2.9
550 M(3,0)=8:M(3,1)=11:M(3,2)=4:
2.9
M(3,3)=7
2.9
560 M(4,0)=8:M(4,1)=6:M(4,2)=4:
2.9
M(4,3)=7
2.9
570 :
2.9
580 WHEN “3”:while=FALSE:ON
2.9
590 REM Fixed data for demo 4x4
2.9
matrix having four eigenvalues
2.9
600 CLS:PRINT‘“ Rows : 4”
2.9
‘“ Columns : 4”
2.9
610 row%=3:col%=3:DIM M(3,3)
2.9
620 M(0,0)=1.00:M(0,1)=0.42:
2.9
M(0,2)=0.54:M(0,3)=0.66
2.9
630 M(1,0)=0.42:M(1,1)=1.00:
2.9
M(1,2)=0.32:M(1,3)=0.44
2.9
640 M(2,0)=0.54:M(2,1)=0.32:
2.9
M(2,2)=1.00:M(2,3)=0.22
2.9
650 M(3,0)=0.66:M(3,1)=0.44:
2.9
M(3,2)=0.22:M(3,3)=1.00
2.9
660 ENDCASE
2.9
670 ENDWHILE
2.9
680 ENDPROC
2.9
690 ————————————————-
2.9
700 DEFPROCmain
2.9
710 DIM Mt(col%,row%),MtM(col%,col%)
2.9
,E(col%)
2.9
720 PROCtranspose(M(),Mt())
2.9
730 PROCsquare_sym(M(),Mt(),MtM())
2.9
740 PROCeigenvalues(MtM(),E())
2.9
750 ENDPROC
2.9
760 ————————————————-
2.9
770 DEFPROCtranspose(R(),Rt())
2.9
780 LOCAL v%,h%
2.9
790 v%=DIM(R(),1):h%=DIM(R(),2)
2.9
800 FOR r%=0 TO v%:FOR c%=0 TO h%:
2.9
Rt(c%,r%)=R(r%,c%):NEXT:NEXT
2.9
810 ENDPROC
2.9
820 ————————————————-
2.9
830 DEFPROCsquare_sym(R(),Rt(),RtR())
2.9
840 RtR()=Rt().R()
2.9
850 ENDPROC
2.9
860 ————————————————-
2.9
870 DEFPROCeigenvalues(RtR(),EV())
2.9
880 REM Eigenvalues are determined
2.9
from R-transposed x R, using the property that eigenvalues do not
change by a similarity
2.9
890 REM *** transformation. Rt.R is
2.9
decomposed in a lower and upper
2.9
tri-angular matrix, Rt.R=LU. Then
2.9
UL has the same eigenvalues as LU.
2.9
900 REM Repeating this process
2.9
iterates all non-diagonal elements to 0, and the diagonal
elements
2.9
to the eigenvalues.
2.9
910 :
2.9
920 REM E.D. Engelhardt, March 1989
2.9
930 :
2.9
940 LOCAL L(),U(),UL(),h%,c%,r%,t%,
2.9
repeat,max,iterations%
2.9
950 h%=DIM(EV(),1)
2.9
960 DIM L(h%,h%),U(h%,h%),UL(h%,h%)
2.9
970 :
2.9
980 PRINTTAB(1,30)“Iteration : ”
2.9
:REM This info may be left out
2.9
990 :
2.9
1000 repeat=TRUE
2.9
1010 REPEAT
2.9
1020 iterations%+=1:PRINTTAB(13,30)
2.9
iterations% :REM may be left out
2.9
1030 REM Calculate lower triangle
2.9
L of RtR
2.9
1040 FOR c%=0 TO h%:FOR r%=c% TO h%
2.9
1050 L(r%,c%)=RtR(r%,c%):t%=c%-1
2.9
1060 IF t%>=0 FORt%=t%TO0STEP-1:
2.9
L(r%,c%)=L(r%,c%)-L(r%,t%)
2.9
*L(c%,t%):NEXT
2.9
1070 IF r%>c% THEN L(r%,c%)=
2.9
L(r%,c%)/L(c%,c%)
2.9
1080 IF r%=c% IF L(r%,c%)<0 THEN:
2.9
FOR t%=0 TO h%:L(t%,c%)=0:NEXT
2.9
1090 IF r%=c% L(r%,c%)=SQR L(r%,c%)
2.9
1100 IF r%=c% AND L(r%,c%)=0 r%=h%
2.9
1110 NEXT:NEXT
2.9
1120 :
2.9
1130 PROCtranspose(L(),U())
2.9
1140 :
2.9
1150 REM Matrix similar to RtR (ie
2.9
having same eigenvalues) is UL
2.9
1160 UL()=U().L()
2.9
1170 :
2.9
1180 REM Determine if diagonals of
2.9
RtR and UL are equivalent
2.9
1190 t%=0
2.9
1200 REPEAT
2.9
1210 IF UL(t%,t%)<>RtR(t%,t%)
2.9
:repeat=FALSE
2.9
1220 t%+=1:IF t%>h% repeat=FALSE
2.9
1230 UNTIL repeat=FALSE
2.9
1240 IF t%<=h% repeat=TRUE:RtR()=
2.9
UL()
2.9
1250 UNTIL repeat=FALSE
2.9
1260 :
2.9
1270 REM Put eigenvalues smaller then
2.9
non-diagonal elements to zero
2.9
1280 FOR t%=0 TO h%:UL(t%,t%)=0:NEXT
2.9
1290 FOR r%=1 TO h%-1:FOR c%=1 TO r%
2.9
1300 IF ABS UL(r%,c%)>max max=ABS
2.9
UL(r%,c%)
2.9
1310 NEXT:NEXT
2.9
1320 FOR c%=0 TO h%
2.9
1330 EV(c%)=RtR(c%,c%):IF EV(c%)<=
2.9
max EV(c%)=0
2.9
1340 NEXT
2.9
1360 ENDPROC
2.9
1370 ————————————————
2.9
1380 DEFPROCprint
2.9
1390 VDU 14
2.9
1400 CLS:PRINT‘“ Rows : ”STR$
2.9
row%‘“ Columns : ”STR$col%
2.9
1410 PRINT‘“ Time(centisecs) : ”;STR$
2.9
(end%-start%)‘’
2.9
1420 PRINT“ ******** Eigenvalues : ”‘
2.9
1430 FOR c%=0 TO col%
2.9
1440 PRINT E(c%)
2.9
1450 NEXT:PRINT
2.9
1460 VDU 15
2.9
1470 ENDPROC
• Partitioning hard drives − It is possible to partition hard drives
with less than 10 Mbyte. The answer is in the REM statements in the
Harddisc program on the PC disc. Change the A2080 in line 610 to any
multiple of &8800 (in hex). Details are given in the REMs.
• Hearsay − We mentioned changing modem baud rates in H & T in May.
Philip Green sends us a way of doing this automatically suggested by
Alfons Tjin. Use a dial prefix in the modem driver edit screen of just
“AT” and then put B3D or B0D, as necessary, in front of the phone number
in the telephone directory.
• Case sensitive system variables − Some readers have had problems
using the *SETMACRO Alias$ command. This is because system variables are
case sensitive i.e. you need to type: Alias$ not ALIAS$
• Overload passwords: A B BROS, CABBAGED, SLIPPERS, PREVIOUS,
PILLAGED, BOVERBOD, LAVATORY, CASSETTE, WHALEÊFM, EXTRACTS, STOPKETS
The following hints were sent in by Lorcan Mongey
• ‘T’ Option in LDR and STR − Assembly language programmers may have
noticed that the Programmer’s Reference Manual mentions a ‘T’ option in
the description of the LDR and STR com-mands (page 608), but neglects to
say what it does. It is, in fact, used for setting the write-back option
and has exactly the same effect as ‘!’. Note that the *MEMORYI disassem
bler always disassembles pre-indexed write-back with ‘!’ and post-
indexed write-back with ‘T’, although you may use either form when
assembling. Bear in mind that post-indexed write-back always takes
place, regardless of the state of the write-back flag.
2.10
• Bit patterns for LDR and STR − There is an omission in Appendix C of
the “ARM Assembly Language programming” book published by Com-puter
Concepts. Appendix C gives the bit patterns of the ARM instruction set,
but does not describe the ‘L’ bit of the ‘Single Data transfer’
instruction. This is the Load/Store bit: 0=store (STR), 1=load (LDR).
2.10
This description also applies to the ‘Block data transfer’ instructions
(STM and LDM).
2.10
• BASIC restrictions − In BASIC II on the BBC B (and IV on the Master)
there were a number of restrictions which no longer apply to BASIC V on
the Archimedes, but have not been specifically mentioned in the
Archimedes User Guide. They are worth noting because they have probably
become ingrained in BBC B users who may not have realised that they have
been lifted.
2.10
1) You can now change MODE inside a procedure or function. This is
because the screen RAM is now completely separate from the program area.
2.10
2) The nesting limits of FOR, REPEAT and GOSUB (10, 20 and 26 respec
tively) no longer apply. Instead of a fixed limit, you can now nest
loops until you run out of RAM. I have successfully nested loops 15,000
deep and run a recursive procedure 30,000 levels deep! Strangely,
nesting GOSUBs too deeply is not trapped and will corrupt your program,
but this situation is unlikely to happen in practice.
2.10
• BASIC errors − I have found four BASIC errors not listed in the User
Guide (Issue 2). They are:
2.10
11 No room for this dimension − An attempt was made to dimension an
array for which there was insufficient space.
2.10
25 Bad MODE − An attempt was made to select a screen mode for which
there is insufficient memory. More memory can be allocated by *CONFIGURE
SCREENSIZE.
2.10
37 No room for function/procedure call − An attempt was made to ‘nest’
too many function and/or procedure calls.
2.10
44 Too many nested structures − An attempt was made to ‘nest’ too many
FOR...NEXT, REPEAT...UNTIL and/or WHILE... ENDWHILE loops.
2.10
Note that 11 and 44 are covered in the Archimedes 400 series BBC BASIC
Guide.
2.10
• Using FORTRAN 77 − The article on using FORTRAN 77 in Archive 1.7
included a sample subroutine showing how to access graphics from
FORTRAN. There are a number of problems with this subroutine. It can’t
cope with negative graphics coordinates (needed after an origin shift),
it sends a line feed to the screen when it is used, which can cause your
graphics to scroll upwards, and it uses an output channel which should
be kept free for file access. The following solves all the problems:
2.10
SUBROUTINE PLOT(K,X,Y)
2.10
INTEGER X,Y I1=IAND(X,?IFF)
2.10
I2=ISHFT(IAND(X,?IFF00),-8)
2.10
J1=IAND(Y,?IFF)
2.10
J2=ISHFT(IAND(Y,?IFF00),-8)
2.10
PRINT 100,CHAR(25),CHAR(K),CHAR(I1),
2.10
CHAR(I2),CHAR(J1),CHAR(J2)
2.10
RETURN
2.10
100 FORMAT (6A1$)
2.10
END
2.10
This method masks out the unwanted bits and shifts the data into the
l.s.b., thus preserving the sign. It uses PRINT instead of WRITE,
avoiding the need for a channel number. The $ at the end of the FORMAT
statement suppresses the line feed. (No criticism of the original
authors is intended; my first attempt looked very similar!)
2.10
Included on this month’s program disc is Graph_ FOR, the FORTRAN source
of a set of graphics subroutines which provide a full set of VDU calls.
Some, like BELL for instance, are trivial, but others are more
complicated.
2.10
• Printer conventions − Many people seem to have difficulty with
setting up the correct linefeed or non-linefeed for their printers for
different app-lications, so I.J. King has tried to explain it for usÉ
2.10
How the Archimedes deals with varying printer standards − Since there
are two standards for printers, the Archimedes has a mechanism to allow
it to cope with both. The standards in question affect the way the paper
is fed through the mechanism and there are two possible cases:
2.10
A. Auto Linefeed: every time the printer receives a carriage return
character (code 13), it generates a line feed (code 10) to move the
paper up a line.
2.10
B. Non-Auto Linefeed: the printer does not gener-ate its own linefeed
characters but relies on the com-puter to send a linefeed after every
carriage return.
2.10
Most modern printers will actually have a switch to select either of
these modes, allowing them to be compatible with most computers, but
this is likely to be difficult to reach. The Archimedes will (in the
case of virtually all software) send a line feed after every carriage
return. To allow compatibility with printers in mode (A) above, it is
possible to tell the machine to ignore a particular code when sent to
the printer. By setting this to 10 (the code for line feed), no line
feeds will be sent to the printer and you are compatible with type (A)
printers.
2.10
This code is set up using the *IGNORE command, for example:
2.10
*IGNORE 10
2.10
To disable the trap altogether, simply enter *IGNORE on its own. Either
of these may be preceded by CONFIGURE to make the effect permanent, e.g.
2.10
*CONFIGURE IGNORE 10
2.10
The Archimedes is set up with a factory default ignore code of 10,
making the system compatible with type (A) printers when it arrives.
2.10
Problems arising when the protocol is ignored − The above should make
everything seem fairly simple and indeed it ought to be. However, some
software houses, notably GST and Grafox (i.e. First Word Plus and
Logistix) have chosen to ignore the sensible protocols described above
and override the *IGNORE status in such a way that they are only
compatible with type (B) printers, regardless of the setting of *IGNORE.
2.10
This means that the hapless user will have been forced to configure his
printer to be type (B) but will not have re-configured his Archimedes
since the software will override the settings and work anyway. They then
go out and purchase a correctly written package, such as System
DeltaPlus etc, and the result is a type (B) printer (generating no line
feeds) on a machine configured for a type (A) printer (and so sending no
line feeds) which results in no line feeds at all and the text all comes
out on the same line.
2.10
A subsidiary problem occurs in some cases, when reconfiguring the
Archimedes to work with type (B) printers, as is necessary if you wish
to use both First Word Plus/Logistix and other, correctly written,
software. The correct way to do this is to enter the command *CONFIGURE
IGNORE with no parameters, completely disabling the printer trap. It is
not correct to enter *CONFIGURE IGNORE 0 as this prevents code 0 from
being sent to the printer and may corrupt some graphics/font change
sequences used by certain software.
2.10
Conclusions − If you are using any package which overrides the Acorn
protocols for printer compatibility in the way described above and also
wish to use correctly written software (in my case, I use both Logistix
and System DeltaPlus), you should take the following steps:
2.10
1. Set your printer so that Auto Linefeed is OFF (usually a DIP switch).
2.10
2. Enter *CONFIGURE IGNORE
2.10
3. Press <ctrl-break> to reconfigure your machine.
2.10
This now only leaves us with one question − why are Acornsoft apparently
condoning this system of forcing the user to have a printer type
different from that for which the machine is configured by default?!
2.10
• PC Emulator Star Commands (Response to query in Archive 2.5 p5) −
There is no need for a *Configure Floppies command from the PC emul-ator
when copying from one 3.5“ disc to another. You must understand the
distinction between log-ical and physical drives: logical drives are
known to the emulator as A, B, C, etc, and are mapped onto the physical
drives 0, 1, etc. It is possible to have more than one logical drive
assigned the same phys-ical drive. This is what happens when you have
your Archimedes configured for one floppy − the emul-ator maps logical
drives A and B onto physical drive 0 and, recognising this when you copy
from A to B, prompts for a disc change. If you have two floppies, the
emulator maps A and B onto 0 and 1 respect-ively. I use an external
5.25” 40/80 track drive on my Archimedes and my config.sys file, listed
below, illustrates the way around the problem.
2.10
device=driver.sys /d:0 /t:80 /f:2
2.10
device=driver.sys /d:1 /t:80 /f:2
2.10
device=driver.sys /d:1 /t:40 /f:0
2.10
device=driver.sys /d:1 /t:40 /f:0
2.10
files=20
2.10
buffers=10
2.10
The first four lines assign more logical drives (which the emulator
gives the letters C, D, E and F) to the physical drives 0 and 1. The
meaning of the parameters is:
2.10
/d: physical drive number
2.10
(0 for internal, 1 for external)
2.10
/t: number of tracks on disc
2.10
(80 for 720k and 40 for 360k)
2.10
/f: disc format
2.10
(2 means 720k, 0 means 360k)
2.10
The first line assigns logical drive C to physical drive 0. You can now
copy from 3.5“ to 3.5” by using ‘copy a:x.dat c:’ and DOS will prompt
for a disc change. The second line maps logical drive D to physical
drive 1, enabling copying between 5.25“ 80-track floppies (copy b:x.dat
d:). The last two lines assign two 40-track drives (E and F) to physical
drive 1, allowing copying between 40-track 5.25” discs (copy e:x.dat f:)
in the same way.
2.10
You should be aware that loading all these device drivers will use up
some application workspace, leaving less for programs, so only install
them when you need them!
2.10
• Three SWIs which are not mentioned in the Programmer’s Reference
Manual (Issue 1):
2.10
OS_AddToVector &47
2.10
OS_WriteEnv &48
2.10
WaveSynth_Load &40300
2.10
(WaveSynth_Load was mentioned but not ident-ified in Archive 1.8, p9)
2.10
Also, there is one SWI which seems to have been mis-spelled in the
Arthur 1.20 ROMs, namely:
2.10
Sound_QSDispatch &401C4
2.10
The ‘S’ between Q and Dispatch shouldn’t be there. If you refer to SWIs
by name rather than number then you must mis-spell this one in the same
way otherwise it won’t be recognised!
2.10
• Infinite energy for ThunderMonk − J.R. Donaldson sent in this
program, which will alter your ThunderMonk disk to give you infinite
energy.
2.10
10 REM > Thun_Cheat
2.10
20 REM Joe Pineapples − Cool Assassin
2.10
30
2.10
40 DIM sector% &400
2.10
50
2.10
60 MODE 0
2.10
70 PRINT “Please insert ThunderMonk
2.10
disc and press a key.“
2.10
80 G = GET
2.10
90
2.10
100 PRINT ‘“Now loading relevant
2.10
sector“‘
2.10
110
2.10
120 SYS “ADFS_DiscOp”,, 1, &C6400,
2.10
sector%, &400
2.10
130
2.10
140 PRINT “Do you want to play
2.10
(C)heat or Normal ?“
2.10
150 G = GET
2.10
160
2.10
170 IF G=ASC(“C”) OR G=ASC(“c”) THEN
2.10
180 sector%!&388 = &E59C0044
2.10
190 sector%!&38C = &E28000FE
2.10
200 sector%!&390 = &E58C0044
2.10
210 ELSE
2.10
220 sector%!&388 = &059C0044
2.10
230 sector%!&38C = &02400001
2.10
240 sector%!&390 = &058C0044
2.10
250 ENDIF
2.10
260
2.10
270 PRINT ‘“Now saving relevant
2.10
sector“‘
2.10
280
2.10
290 SYS “ADFS_DiscOp”,, 2, &C6400,
2.10
sector%, &400
2.10
300
2.10
310 PRINT “Change complete. Now use
2.10
disc as normal.“
2.10
320 END
2.10
• Thunder Monk passwords − the Thunder Monk passwords change from disc
to disc (or do they change from month to month? Ed), but they can be
found at address &4E400. Just find your level two password in the list
below and next two words will be used for levels three and four e.g. our
level two password is STEVES so the passwords for the next levels are
BIRTHDAY and MIDSUMMER.
2.10
SHIRT JUMPER WELLIES Y-FRONTS LOVERS HEARTS CUPID VALENTINE DANIEL AND
SIMONS BIRTHDAY JOKES SHOWERS FOOL SPRING POLE EXAMS SUNNY STUDY STEVES
BIRTHDAY MIDSUMMER WARMER HOLIDAYS MAJORCA SUNHAT HOTTER RESULTS FAILED
PASSED PISSUP SCORCHER RESTART SUNBURN ARCHIE SPOOK SHIVER HALLOWEEN
COOLING BONFIRE WEEEEEE FIREWORKS CHILLY CHRISTMAS HOLLY PRESENTS MERRY!
2.10
(D’you get the significance of the passwords?? Ed.)
2.10
• View to FWP − When using the utility provided with First Word Plus
to convert View files, Robert Leon noted that the left margin default
(in the Print File dialogue window) should be changed to 4, otherwise
the file is not printed properly.
2.10
• Using 1st Mail for multi-column printouts − David Scott − Text which
is to be printed in more than one column is first prepared with First
Word Plus and it is at this stage that preparations must be made for the
print format. The text format must suit the final required column width
otherwise First Mail will ignore the instructions to print out in multi
columns.
2.10
An example will show how to lay out the text. Suppose that you require
two columns each 31 characters wide set side by side on a 65 character
wide sheet. This will be possible as it allows 3 characters for the
central white column since
2.10
31 + 3 + 31 = 65
2.10
The text must be prepared using a line length of 31 characters. The page
markings in First Word Plus will show final page 1 column 1 as page 1,
final page 1 column 2 as page 2, final page 2 column 1 as page 3 and so
on.
2.10
When the text has been fully prepared enter First Mail and follow the
instructions given on pages 196 and 197 of the manual. The number of
columns must be set to 2 in this example.
2.10
• Another possible bug in First Mail − David Leckie − When using First
Word Plus with the ruler set to double line spacing, continuous text,
i.e. no returns are double spaced but text followed with a return is not
double spaced as you would expect.
2.10
However when a First Mail mail-merge is done from the file, the mrg file
contains double spaced text where there was single spaced text in the
original doc. Thus if you want, say, your address lines to be double
spaced then they should be a RETURN between each line in the doc file
only if you are not going to do a First Mail mail merge. If you are
doing a mail merge then they should be single spaced i.e. no RETURNS
because after the mail merge double line spacing will be inserted! Very
funny!
2.10
• “Memalloc” module − John Fidler was playing with the !Lander program
in RISC-OS when he realised that it should not have run with the
configuration settings on his machine. He looked in the !Lander
directory (by clicking on the icon in the directory viewer while holding
the <shift> key) and found the Memalloc module.
2.10
This module provides nine new star commands, which allow you to check
and alter the size of various memory pools i.e. system heap, RMA, screen
area, sprite area and font cache.
2.10
==> Help on keyword MemAlloc
2.10
Module is: MemAlloc util 0.11 (06 Dec 1988)
2.10
Commands provided:
2.10
SystemSize RMASize ScreenSize SpriteSize FontSize
2.10
RAMFSSize RMAFree SpriteFree FontFree
2.10
• Desktop ScreenSize configuration − When using the desktop, the
memory allocated to the screen area is regulated by the desktop screen
mode and not the configuration setting e.g. if you are in mode 12 then
the screen area will have 80k allocated to it (or 96k for the 400
series).
2.10
• Desktop startup commands − When starting the desktop using *Desktop,
you can make the Archimedes run a file or perform a star command. This
facility could be used to start the desktop up in a predefined state.
2.10
==> Help on keyword Desktop
2.10
*Desktop starts up any dormant Wimp modules, and also passes an optional
2.10
*command or file of *commands to Wimp_StartTask.
2.10
Syntax: *Desktop [<*command> | -File <filename>]
2.10
• Converting ArcTerm 6.01 to RISC-OS − Arc-Term 6.01 will work under
RISC-OS if you make a !Run file in the !ArcTerm application directory:
2.10
RMEnsure InternationalKeyboard 0.17
2.10
RMReInit InternationalKeyboard
2.10
DIR <Obey$Dir>.!ArcTerm
2.10
Run ArcTerm
2.10
• Extra Options for the Copy Command − The new User Guide (page 208)
lists a number of new options for the Copy command which considerably
extend its usefulness. The L and N options are par-ticularly useful for
performing backups from hard disc to floppy disc. Thus the command:
2.10
*Copy HD::$.A.* FL::$.* ~CFQR
2.10
will make a quick backup, without confirmation, of all the files and
subdirectories in directory A of the hard disc named HD onto the floppy
disc named FL. If however the option N is also added then only the files
which have changed since the last backup will be copied, thus reducing
the backup time consider-ably. If the L option is also added then even
more time is saved as the directories of both source and destination
disks are checked before any attempt is made to load the files
themselves.
2.10
If suitable Copy commands are added to the end of an application !Run
file then an automatic backup of changed files can be made when you have
finished using the application. In this case it is vital to quote the
name of the required backup floppy disc so that a request to load it can
be given if it is not already in the drive.
2.10
• RISC-OS RS423 − Richard House says that using RISC-OS he can now
communicate with his BBC Model B at 19200 baud, without any errors
(whereas under Arthur 1.2, even with the patch, he was limited to 9600
baud).
2.10
• Diagram II using RAMdisc − Load the file “Setup” and change the “8”
in lines 10045, 10750, 10765, 10805 and 11325 to “23”. This will cause
it to access the ram-disk (assuming you copied Diagram II over to the
ram-disk) thereby running much faster during scrolling and saving wear
and tear on your floppy or hard disk. (J.Daniels of Pineapple Software)
2.10
• MIDI !Maestro − One reader says that there is an undocumented
facility in the !Maestro application which can play a MIDI instrument if
the MIDI podule is fitted.
2.10
• Typing control characters − If you wish to use a “non-keyboard”
character under RISC-OS, just hold down the <ALT> key and type in the
character number on the keypad.
2.10
• RMReInit SpriteUtils − Many applications unplug modules and
reinitialise them later. Often, under RISC-OS, the SpriteUtils module
does not get reinitialised. If you have any problems loading sprites or
get the “SWI not known” error, you can check whether your modules have
been reinitialised properly by typing *ROMModules.
2.10
One reader says that ‘Pacmania’ can be cured of this by adding the
following line to the !BOOT file:
2.10
935 *RMReInit SpriteUtils
2.10
• Multi-Tasking − How many tasks can RISC-OS run simultaneously? The
manual doesn’t say, so I decided to find out by loading multiple copies
of the desktop clock. When I tried to load the 29th clock I got an error
message “Too many tasks”, making the upper limit 28.
2.10
• Leaving the Desktop from a Command File − David Scott − The answer
to my own previous help query is actually quite simple when you know
how! The last command in the file, which must be an obey file, (it does
not work with an exec file) must be:
2.10
*fx138,0,252
2.10
which simulates pressing <control-shift-f12>.
2.10
• Space for large applications − The methods used by Acorn and other
suppliers of application software to load their applications which
require a lot of space, seem to be both devious and, in many cases,
ineffective since they result in less space being available for the
application than under Arthur 1.2.
2.10
The method illustrated below allows over 300k of data space in Logistix
or over 600k of memory with the PC Emulator on a 1Mbyte machine. The
technique is a three stage process and is illustrated for Logistix.
2.10
Note that the machine will have to be reset after using the application
in order to restore all the normal modules and their facilities.
2.10
Note also that the amount of free space will vary depending on the
configuration settings. In my case, these are 80k for the screen (Mode
12) and 0K for System sprites, font cache and RAM FS.
2.10
If you use Econet then the modules NetFS, NetPrint, BBCEconet, NetFiler
and NetStatus should also be killed in Stage 2. If you do not use Econet
then you will gain marginally more space for all applications by
*Unplugging these modules as I have done.
2.10
Stage 1 − Set up the standard !Run file for the application so that it
sets a function key to execute the stage 2 file after quitting the
desktop.
2.10
| >$.!Logistix.!Run
2.10
IconSprites <Obey$Dir>.!Sprites
2.10
Key1 Quit|MDir $|MExec $.!Logistix.Lgx1|M
2.10
Fx138,0,252
2.10
Fx138,0,129
2.10
Stage 2 − This file must be an command file (not Obey). It clears the
temporary modules and then kills all the unwanted modules. A function
key is then set up to execute Stage 3 and the file ends by recovering
the freed space using the RMTidy com-mand which must be the last command
in the file.
2.10
| >$.!Logistix.Lgx1
2.10
RMClear
2.10
RMKill Debugger
2.10
RMKill Desktop
2.10
RMKill WindowManager
2.10
RMKill FontManager
2.10
RMKill InternationalKeyboard
2.10
RMKill SoundScheduler
2.10
RMKill StringLib
2.10
RMKill Percussion
2.10
RMKill SpriteExtend
2.10
RMKill Draw
2.10
RMKill Hourglass
2.10
RMKill Podule
2.10
Key 1 *Obey $.!Logistix.Lgx2|M
2.10
FX138 0 129
2.10
RMTidy
2.10
Stage 3 − This Obey file sets the current directory (it was cleared by
the radical effects of RMtidy) and then loads the Floating point
emulator and Logistix directly. The final line is an optional backup
command which automatically backs the new and changed data files up to a
floppy disc (named S1 in this case).
2.10
| >$.!Logistix.Lgx2
2.10
Dir $.!Logistix
2.10
RMLoad $.!System.Modules.
2.10
FPEmulator
2.10
Lgx
2.10
COPY :DJS.!Logistix.Sheet.* :S1.*
2.10
~CFLNQ
2.10
PC Emulator − The method is similar for stages 1 and 2 except the
following additional modules can be killed in stage 2: SystemDevices,
TaskManager, PaletteUtil, Filer, ADFSFiler, RAMFSFiler, ShellCLI and
RamFS. Stage 3 is not required as the line which sets the function key
termination command is:
2.10
Key 1 PC.Emulate|M
2.10
which enters the PC Emulator directly. Note that the PC directory must
be in the root and must be called PC otherwise the Emulator fails during
loading.
2.10
• Getting First Word Plus started − further to the comments on page
20/21, last month, it is not a good idea to use *MOUNT as First Word
Plus will then not allow you to change discs, *DRIVE should be used and
this works fine. My machine is configured to boot with the external
drive selected, which usually holds a “library disc”, which is how I
discovered the problem. First Word Plus now boots happily under RISC-OS,
including an amended version of the key press module which traps <ctrl-
f12> to provide a command line similar to that on the desk top − i.e.
scrolling up from the bottom of the screen. (We’ll try to get hold of
this for the monthly disc. Ed.)
2.10
• First Word Plus from the RISC-OS desktop − create the following run
file:
2.10
!Run
2.10
| !Run for !First Word Plus+ version 0.01
2.10
IconSprites <Obey$Dir>.!Sprites
2.10
WimpSlot -min 400k
2.10
set FirstWordPlus$Resources $.Resources.1wp.
2.10
set FirstWordPlus$Docs &.1wp.
2.10
echo<5><23><17><7><6><8><0><8><0>
2.10
<0><0><0><0>
2.10
run “<FirstWordPlus$Resources>1wp”
2.10
• First Mail under RISC-OS − David Leckie − While First Word Plus has
drawn a lot of comment, very little mention has been made First Mail,
the mail merge program that accompanies it.
2.10
When run under RISC-OS the main window will not resize. Now this may not
seem like much of a problem but the trouble is that the printer window
is hidden under the main window and cannot be easily accessed.
2.10
Fortunately the corners of the window are just visible and can be
clicked on. The printer driver window pops up when clicked on ok, but
while the destination printer window can be clicked on, the name of the
selected destination printer is still hidden. This problem is compounded
by the last line of the 1st paragraph on page 154 of the manual being
wrong. “The four options Parallel Port, Serial Port, Network Port and
Disc will appear in rotation.
2.10
They do not rotate in the order above. Parallel Port is the first and
Disk is the third not fourth but which is network and serial? Can
someone with Arthur please tell us?
2.10
Thus, if you want to do a merge to parallel printer it works fine. For
disc, point to the corner of the window and give 2 clicks (not 3). If
you need serial or network, try 1 or 3 clicks.
2.10
Thanks to Mark Burch who helped to crack the problem.
2.10
• Installing Artisan − Sean Kelly − There are three tips: the first is
on getting Artisan to return control to the desktop without resetting
the system; the second is on putting Artisan in any chosen directory;
the third is not strictly related to RISC-OS, but is on persuading
Artisan to work with compressed screens.
2.10
Returning to the desktop − When Artisan is installed as described on the
RISC-OS support disc, it does not return correctly to the desktop. The
following modification was made to the program on my A440, and works
perfectly:
2.10
1. Load program ART5 and, using the BASIC EDITOR, find the line: “DEF
PROCLAR”
2.10
2. The next line should be a multi-statement line containing in-line
assembly code. If so, you have found the correct routine. Delete
everything on this line except for the first three statements and then
add “:QUIT” so that the new line reads:
2.10
MODE12:OSCLI“FX4”:OSCLI“UP”:QUIT
2.10
3. Rename the old ART5 (in case you have made a mistake) and save the
new version as ART5.
2.10
This new version returns to the desktop, in the same condition as when
Artisan was called, when you quit Artisan.
2.10
Altering the directory structure − When installed using the hard disc
install program, Artisan insists on living in a directory called
:4.$.Artisan. This can be changed − the following details relate to my
chosen directory of :4.$.APPS.!ARTISAN.
2.10
1. !RUN should be altered from the support disc version. The new version
is:
2.10
ECHO <22><&8C>
2.10
WIMPSLOT -MIN 200k
2.10
DIR :4.$.APPS.!ARTISAN *** put your own directory here ***
2.10
URD @ BASIC ART4
2.10
In my case, the pathname of !RUN is “:4.$.APPS. !ARTISAN.!RUN”. Before
changing !RUN, re-name the old one in case of accident.
2.10
2. Alter ART5 using the Basic Editor. Several lines need changing; in
each case the change consists of altering the given directory to point
to your new directory. The lines that need altering can be found by
searching for the following strings using the editor (they are all
unambiguous, but the case of each letter is crucial):
2.10
cLare%=FALSE:
2.10
A%=cLARESMI
2.10
WHEN12:OSCLI
2.10
WHEN1:OSCLI“LOAD
2.10
OSCLI“CDIR
2.10
OSCLI“DIR ”+ClA$+
2.10
Preserve the old ART5 in case of problems.
2.10
• Adapting Artisan for Compressed Screens − I use a modified version
of the screen compression routine originally published in Personal
Computer World magazine. It uses the commands *CSCREENLOAD and
*CSCREENSAVE to load and save compressed screens, and compressed screens
are given the filetype &010. The adaptation below will work equally well
with other com-pression routines with the proviso that the compressed
screen loading routine must recog-nize and correctly deal with normally
saved screens (filetype &FF9).
2.10
1. Load ART5 and modify it using the BASIC Editor (first rename ART5, in
case of errors). Immediately after the REM statements at the start of
the program, add these two lines (substituting your own compressed
screen save and load commands):
2.10
*SET Alias$SCREENSAVE CSCREENSAVE %0
2.10
*SET Alias$SCREENLOAD CSCREENLOAD %0
2.10
Substitute the names of your own commands for CSCREENSAVE and
CSCREENLOAD.
2.10
2. Find DEFPROCcLaRESM with the editor. Look about 14 lines down and
there will be a line beginning with WHEN&FF9. Four lines further down
should be a line beginning with ENDIF. Add two new lines after this
ENDIF line (substituting your own compressed screen filetype):
2.10
WHEN &010
2.10
RES%=3:mIC%=ReSM%:ReSM%+=1:cLarESM%=7
2.10
3. Find DEFPROCPS with the editor. Look about seventeen lines down and
there will be a line beginning with WHEN&FF9. Six lines further down
should be a line beginning with ENDIF. Add two new lines after this
ENDIF line (substituting your own compressed screen filetype):
2.10
WHEN &010
2.10
PROCGw(laRES%): clArES%=4
2.10
The modified version of ART5 will correctly handle compressed and
uncompressed screens for loading, and will normally save screens in
compressed form.
2.10
• RISC-OS Postscript Printer Drivers − One of our readers can only use
a laser printer from an Apple Mac, but wanted to obtain good quality
images of the documents that he produced in !Draw and !Edit. In order to
do this he redirected the output of the !PrinterPS to a file and
‘ported’ the file across to the Mac. The reason why this works is
because the output of !PrinterPS application is straight ASCII Post
script text, so in theory, the resulting file could be used by any
Postscript set up.
2.10
• Configuring !PrinterDM − some readers have had problems outputting
to their dot matrix printers. This might be because the !PrinterDM
application must be configured for the printer you are using. This can
be done by clicking, with <select>, on the printer icon (once installed)
and then clicking on the printer name that appears in a window, until
the name of your printer appears. Then select the “Save Choice” option
on the !PrinterDM menu. The printers that !PrinterDM supports are: Epson
FX, LQ, and LQ-850 compatibles and the NEC Pin-Writer P6 plus.
2.10
• RISC-OS multisync text scaling solution! − Richard Averill − If you
turn back to Archive 2.9 p14, you will see the problem of text scaling
in multisync modes raised. Having also experienced this problem, I tried
to solve it.
2.10
Firstly, I tried using the output to sprites feature to modify this.
Since this did not alter the size of the font at all, I then tried a
more interesting method. I knew that the standard vdu 5 font size was
8x8 pixels, so I ran the following program to tell me which locations in
the operating system’s workspace (&0000-&7FFF) contained the value 8.
2.10
10 REM > $.TextSize.Find8
2.10
20 REM (C) Richard Averill, 1989.
2.10
30 FOR I%=0 TO &7FFC STEP 4
2.10
40 IF !I%=8 THEN PRINT ~I%;
2.10
50 NEXT
2.10
I then had a list of locations, so I set vdu 5 mode and *Memory’ed each
of the locations to have a closer look. Storing 16 in the second
location (&1360) caused the x text size to be doubled! There were 3 more
8‘s consecutively after this value, so after a little testing I came to
the conclusion shown by the following table:
2.10
Address Contents
2.10
&1360 x size
2.10
&1364 y size
2.10
&1368 x spacing
2.10
&136C y spacing
2.10
All values are given in pixels, so by default these are 8,8,8,8. The
WIMP manager changes the x and y values according to the x and y ‘eig’
factors read by swi OS_ReadModeVariable detailed in OS1.2 PRM pages
124−126. Note that the values need not be multiples of 8, but the
characters will look rather odd otherwise!
2.10
The following procedure will enable you to set the text size and
spacing. The syntax is PROCtextsize(x size, y size, x spacing, y
spacing).
2.10
10000 DEF PROCtextsize(x%,y%,sx%
2.10
,sy%)
2.10
10010 !&1360=x%
2.10
10020 !&1364=y%
2.10
10030 !&1368=sx%
2.10
10040 !&136C=sy%
2.10
10050 ENDPROC
2.10
For example, PROCtextsize(16,8,16,8) will give you double width text
when in VDU 5 mode. This will be square in mode 12 etc. and of a
rectangular shape in mode 20 etc. The text spacing will usually be the
same as the text size.
2.10
To set the default text size from the RISC-OS desktop (the answer to the
query,) run the following program (which is in the “$.TextSize”
directory of the monthly disc) from within the desktop, and it will
redraw the whole screen to enable the new size to take effect.
2.10
10 REM > $.TextSize.SetSize
2.10
20 REM (C) Richard Averill, 1989.
2.10
30 REM restores default text size and spacing in the RISC-OS desktop.
2.10
40
2.10
50 !&1360=8
2.10
60 !&1364=8
2.10
70 !&1368=8
2.10
80 !&136C=8
2.10
90 SYS “Wimp_Initialise”,200,
2.10
&4B534154 TO task%
2.10
100 SYS “Wimp_ForceRedraw”,-1,0,0,
2.10
&FFFF,&FFFF
2.10
110 SYS “Wimp_CloseDown”,task%,
2.10
&4B534154
2.10
120 QUIT
2.10
This will set the text size to 8 pixels, the same as under the Arthur
WIMP manager. So if you have a high resolution monochrome, the text will
become four times smaller in each direction than normal!
2.10
Unfortunately, there is a slight problem. The RISC-OS WIMP assumes
scaling will be done to ensure that the size of the text is always 16x32
OS units and uses these values when calculating text widths/heights
instead of finding the sizes from the operating system. So any verti
cally centred text (such as window titles) will not be centred properly
in multisync modes!
2.10
For real compatibility with Arthur 1.2 WIMP applications, you can save
the Arthur 1.2 WindowManager module from ROM to disc and *RMLoad this
into RISC-OS instead. The Arthur 1.2 WIMP module is in the “$.TextSize”
directory of this month’s programs disc.
2.10
• Limited ADFS memory (RISC-OS/Arthur 1.2) − One reader has written in
saying that his Archimedes will only *MOUNT six discs. On the seventh,
the drive spins continuously until the disc is removed. This happens
because the ADFS only has a limited amount of memory to store the
directory information. The amount of memory allocated for this can
controlled by using *Configure ADFSDirCache.
==> Help on keyword ADFSDirCache
*Configure ADFSDirCache sets the size of the directory cache (in Kbytes)
used by the ADFS. A value of 0 selects a default value which depends on
RAM size.
Syntax: *Configure ADFSDirCache <size>[K]
You can also make the Archimedes forget that it has seen the disc by
using *DISMOUNT.
2.11
==> Help on keyword Dismount
2.11
*Dismount closes files, unsets directories and parks the given disc.
2.11
Syntax: *Dismount [<disc spec.>]
2.11
• Three floppies for Arthur 1.2 desktop − In Archive 2.8, pages 11/12,
there is a hint which allows you to access three drives from the
desktop. However, the hint states that you must start the desktop up by
typing */Desktop instead of *Desktop. One reader says that you could of
course set up *Set Alias$Desktop Run Desktop which would then allow you
to start up using *Desktop.
2.11
• In First Word Plus, when printing after opening more than one file,
the first file you opened will be offered for printing, not the last one
you closed!
2.11
• Configuring your printer under the PC Emulator − In reply to Chris
Walker’s question, you must use the following reserved words when
configuring your printer:
2.11
For serial printers use: AUX or COM1, COM2, COM3É
2.11
For parallel printers use: PRN or LPT1, LPT2É
2.11
• Sprite Plot comments from Martin Simmons − The article on sprite
plotting was interesting since it is always good to see how other
programmers solve problems. However, the routines are far from being the
fastest possible, a major inefficiency being that the screen pointer is
updated after every pixel is plotted. This could be rectified by
deleting 2410, 2460, 2510, 2580 and changing the following:
2.11
2010 PROCplot_4_pixels(4*
2.11
(gjenta-1))
2.11
2050 ADD screen_pointerR,
2.11
screen_pointerR,#320
2.11
2110 DEF PROCplot_4_pixels(index)
2.11
2400 STRNEB data5R,
2.11
[screen_pointerR,#index+0]
2.11
2450 STRNEB data5R,
2.11
[screen_pointerR,#index+1]
2.11
2500 STRNEB data5R,
2.11
[screen_pointerR,#index+2]
2.11
2570 STRNEB data5R,
2.11
[screen_pointerR,#index+3]
2.11
Now the pointer is only changed at the end of each line. This improves
performance over the published routine by about 10% for a 24x24 pixel
sprite with no black pixels.
2.11
It would be quicker to use word stores instead of byte stores but this
would complicate the routine and may even slow it down overall.
2.11
• D.I.Y. A3000 serial interface − Mike Harrison (Archive 2.10 p 56)
didn’t know what the chip numbers were for the A3000 serial interface
kit. You need a 6551 (which ought to be one of the ones manufactured by
CMD) and an LT1133.
2.11
• Evaluation of Algebraic Expressions (E.D. Engelhardt) − Anyone who
is interested in the evaluation of valid algebraic expressions could try
to use PROCexpression in program Evalexpr as given below. The procedure
mentioned has been written using suggestions of Mr de Heus, ECD, Delft,
Holland.
2.11
Variable names in an expression are single, lower-case characters
ranging from ‘a’ to ‘z’. These names are stored in ‘var$’. Each
character in the input expression ‘ex$’ is matched with its presence in
‘var$’. If so, its position in ‘var$’ is detected and it is replaced by
the (arbitrary) character ‘$’. The position is used to assign an
appropriate value to the actual variable by means of array ‘var()’. The
value of the expression is obtained using the EVAL function.
2.11
The reason EVAL(ex$) is preceded by EVAL (“FALSE”) in PROCevalexpression
is as follows: If one enters an expression containing no variables but
numbers only, and the expression cannot be evaluated (e.g. LN0 or 3/0)
an error message appears on the screen. Thereafter, entering the same
type of expression, again not containing variables (e.g. LN9 after LN0
or 6/5 after 3/0), results in the same error message. To prevent this
from happening the instruction EVAL(“<>”) is included. I discovered this
‘feature’ by accident and found the solution by trial and error. I would
appreciate any comments from interested readers.
2.11
10 REM >Evalexpr
2.11
20 :
2.11
30 WHILE TRUE
2.11
40 PROCevalexpression
2.11
50 ENDWHILE
2.11
60 END
2.11
70 :
2.11
80:
2.11
90 DEFPROCevalexpression
2.11
100 k$=“ Press any key to continue !”
2.11
110 LOCAL ERROR
2.11
120 ON ERROR LOCAL IF ERR=17 THEN
2.11
PRINT‘’“ *** Escaped program !”‘
2.11
:END ELSE PRINT‘“ ”;REPORT$’‘k$;:
2.11
dummy=GET:ENDPROC
2.11
130 :
2.11
140 PROCinput
2.11
150 :
2.11
160 PROCexpression
2.11
170 exval=EVAL(“FALSE”) :REM
2.11
*** To prevent error message
2.11
after evaluation of a wrong
2.11
expression, e.g. LN0. Try to REM this
line !
2.11
180 exval=EVAL(ex$)
2.11
190 :
2.11
200 PROCoutput
2.11
210 ENDPROC
2.11
220 :
2.11
230 DEFPROCinput
2.11
240 CLS:PRINT‘“ Choice of variables
2.11
from a to z.“‘
2.11
250 LINE INPUT“ Give expression : ”
2.11
ex$
2.11
260 ENDPROC
2.11
270 :
2.11
280 DEFPROCoutput
2.11
290 PRINT‘“ Function value of ”;ex$
2.11
;“ = ”;exval
2.11
300 PRINT’k$;:dummy=GET
2.11
310 ENDPROC
2.11
320 :
2.11
330 DEFPROCexpression
2.11
340 LOCAL var$,var(),t%,i%
2.11
350 var$=“abcdefghijklmnopqrstuvw
2.11
xyz“
2.11
360 DIM var(LEN(var$))
2.11
370 :
2.11
380 FOR t%=1 TO LEN(ex$)
2.11
390 i%=INSTR(var$,MID$(ex$,t%,1))
2.11
400 IF i%>0 THEN
2.11
410 var$=LEFT$(var$,i%-1)+“$”
2.11
+MID$(var$,i%+1)
2.11
420 PRINT‘“ Value of ”;
2.11
MID$(ex$,t%,1);“ : ”;
2.11
430 INPUT“”var(i%)
2.11
440 :
2.11
450 CASE i% OF
2.11
460 WHEN 1:a=var(i%)
2.11
470 WHEN 2:b=var(i%)
2.11
480 WHEN 3:c=var(i%)
2.11
490 WHEN 4:d=var(i%)
2.11
500 WHEN 5:e=var(i%)
2.11
510 WHEN 6:f=var(i%)
2.11
520 WHEN 7:g=var(i%)
2.11
530 WHEN 8:h=var(i%)
2.11
540 WHEN 9:i=var(i%)
2.11
550 WHEN 10:j=var(i%)
2.11
560 WHEN 11:k=var(i%)
2.11
570 WHEN 12:l=var(i%)
2.11
580 WHEN 13:m=var(i%)
2.11
590 WHEN 14:n=var(i%)
2.11
600 WHEN 15:o=var(i%)
2.11
610 WHEN 16:p=var(i%)
2.11
620 WHEN 17:q=var(i%)
2.11
630 WHEN 18:r=var(i%)
2.11
640 WHEN 19:s=var(i%)
2.11
650 WHEN 20:t=var(i%)
2.11
660 WHEN 21:u=var(i%)
2.11
670 WHEN 22:v=var(i%)
2.11
680 WHEN 23:w=var(i%)
2.11
690 WHEN 24:x=var(i%)
2.11
700 WHEN 25:y=var(i%)
2.11
710 WHEN 26:z=var(i%)
2.11
720 ENDCASE
2.11
730 ENDIF
2.11
740 NEXT
2.11
750 :
2.11
760 ENDPROC
2.11
2.11
• First Word Plus − I am sure that all users of First Word Plus have
found it considerably enhanced by the use of Steve Hoare’s Interrupt
Module (available on Shareware N¼6). The main use for this is in
mounting new discs, formatting and creating directories. I have recently
discovered that it can also be used for *EXECing files into the word
processor. This can be very useful because First Word Plus treats the
standard ASCII space character as a ‘hard’ space. This means that if
straight ASCII text is read into First Word Plus in the regular way it
can not be formatted because each line is treated as an entire word. By
using the interrupt module and *EXECing the file it is as if it were
being typed in from the keyboard. Spaces between words are thus
translated into ‘soft’ spaces so that the resulting document can be
formatted in the usual way. Brian Cowan
2.11
• Greek characters − (Gerald Fitton) For some time now I have been
considering converting all my old Wordwise files to PipeDream files.
The thing that has been putting me off is that, since I teach (amongst
other things) maths and statistics, I need to be able to print Greek
letters such as CDSYabc defghijklmnopqrstuvwxy. It is relatively easy
from Wordwise to define a new character on the Epson FX printer, but not
so easy to include it in PipeDream’s Printer On string. I have got
round this by running a BASIC program from within PipeDream’s !Run file
that sends the necessary codes for the Greek characters to the printer.
You can then have What-You-See-Is-What-You-Get Greek characters on
screen by using the sequence <Alt>+E+C. This is what you do:
2.11
Modify the !Run file to include the command
2.11
BASIC -quit “<PipeDream$Dir>.
2.11
Printers.Greek“
2.11
My !Run file now looks like the one below.
2.11
| > !PipeDream.!Run
2.11
Set PipeDream$Dir <Obey$Dir>
2.11
WimpSlot -min 160k -max 640k
2.11
RMReInit InternationalKeyboard
2.11
RMKill InternationalKeyboard
2.11
BASIC -quit “<PipeDream$Dir>.
2.11
Printers.Greek“
2.11
RMEnsure FPEmulator 2.60 RMLoad
2.11
<System$Path>Modules.FPEmulator
2.11
Set Alias$@RunType_DDE Run
2.11
<PipeDream$Dir>.!Run %%*0
2.11
Set File$Type_DDE PDream
2.11
IconSprites <PipeDream$Dir>
2.11
.!Sprites
2.11
Load <Obey$Dir>.piped.pd 8000
2.11
DIR <Obey$Dir>
2.11
Echo <26>
2.11
Pointer 0
2.11
Go 8000 ; %*0
2.11
DIR adfs::HardDisc4.$
2.11
Include the new program ‘Greek’ in a suitable directory; I have chosen
the ‘Printers’ directory.
2.11
100 REM > <PipeDream$Dir>.
2.11
Printers.Greek
2.11
150 :
2.11
160 *Alphabet Greek
2.11
180 VDU 2
2.11
200 RESTORE
2.11
210 REPEAT
2.11
220 READ byte%
2.11
230 IF byte%<>-1 THEN VDU 1,byte%
2.11
240 UNTIL byte%=-1
2.11
250 :
2.11
260 VDU 3
2.11
270 :
2.11
280 END
2.11
300 :
2.11
310 DATA 27,64
2.11
320 DATA 27,58,0,0,0
2.11
330 DATA 27,37,1,0
2.11
340 DATA 27,54
2.11
350 DATA 27,38,0,108,108
2.11
360 DATA 136,0,128,0,252,2,0,2,0,0,0,0
2.11
370 DATA 27,38,0,128,128
2.11
380 DATA 138,8,4,2,4,8,16,32,64,128
2.11
,0,0
2.11
390 DATA 27,38,0,176,176
2.11
400 DATA 168,0,0,64,160,0,160,64,0,0
2.11
,0,0
2.11
410 DATA 27,38,0,177,177
2.11
420 DATA 139,18,0,18,0,126,0,18,0,18
2.11
,0,0
2.11
430 DATA 27,38,0,195,196
2.11
440 DATA 137,130,124,130,0,128,0,128,
2.11
64,0,0,0
2.11
450 DATA 139,2,4,10,16,34,64,130,96,
2.11
26,4,2
2.11
460 DATA 27,38,0,211,211
2.11
470 DATA 139,130,0,198,0,170,0,146,0,
2.11
130,0,0
2.11
480 DATA 27,38,0,217,217
2.11
490 DATA 139,58,68,130,0,128,0,130,68
2.11
,58,0,0
2.11
500 DATA 27,38,0,225,249
2.11
510 DATA 138,28,34,0,34,20,8,20,32,2
2.11
,0,0
2.11
520 DATA 138,127,128,18,128,18,128,
2.11
114,12,0,0,0
2.11
530 DATA 11,64,0,64,32,16,11,4,8,16
2.11
,96,0
2.11
540 DATA 138,12,18,64,178,0,146,0,
2.11
146,76,0,0
2.11
550 DATA 137,8,20,8,34,8,34,8,34,0
2.11
,0,0
2.11
560 DATA 8,13,144,37,192,5,130,0,0,0
2.11
,0,0
2.11
570 DATA 10,64,60,64,0,64,0,64,63,0
2.11
,0,0
2.11
580 DATA 138,56,68,16,130,16,130,16,
2.11
68,56,0,0
2.11
590 DATA 71,0,0,124,0,4,0,0,0,0,0,0
2.11
600 DATA 138,62,0,8,0,20,0,34,0,0,0,0
2.11
610 DATA 136,130,68,40,16,8,4,2,0,0
2.11
,0,0
2.11
620 DATA 10,127,0,4,0,4,0,4,120,4,0,0
2.11
630 DATA 10,64,32,16,8,4,8,16,96,0
2.11
,0,0
2.11
640 DATA 9,128,40,212,0,149,0,149,2,0
2.11
,0,0
2.11
650 DATA 139,0,0,0,0,0,0,0,0,0,0,0
2.11
660 DATA 138,32,0,62,0,32,0,62,0,32
2.11
,0,0
2.11
670 DATA 9,63,64,0,68,0,68,56,0,0,0,0
2.11
680 DATA 139,0,0,0,0,0,0,0,0,0,0,0
2.11
690 DATA 139,28,34,0,34,0,34,28,32,0
2.11
,32,0
2.11
700 DATA 10,32,64,0,64,60,64,0,64,0
2.11
,0,0
2.11
710 DATA 9,64,56,4,0,4,0,120,0,0,0,0
2.11
720 DATA 10,56,68,0,68,187,68,0,68,56
2.11
,0,0
2.11
730 DATA 9,65,34,20,8,20,34,65,0,0
2.11
,0,0
2.11
740 DATA 11,120,4,0,4,251,4,0,4,120
2.11
,0,0
2.11
750 DATA 138,28,34,0,2,12,2,0,34,28
2.11
,0,0
2.11
760 DATA -1
2.11
2.11
Incidently, this shows how you can include a BASIC program within an
Obey file and then come back to RUN the rest of the Obey file.
2.11
You have to remember to remove ESC “@” from the Printer On string
otherwise you will lose all the character definitions you have just
downloaded! G L Fitton.
2.11
This final section of hints and tips has been extracted from the Archive
Bulletin Board Service (BBS) by Richard Forster.
2.11
(N.B. There may be some over-lap with other H & T, but I don’t have time
to edit it out − I’m just off on my Holidays. Ed.)
2.11
• First Word Plus Margins − It is possible to get First Word Plus to
change its margins permanently, but it is not easy. It may also depend
on your version of the software, and this method may not work on all
versions. Make sure you try it on a backup copy!
2.11
10 wp%=OPENUP(“Resources.1wp.1wp”)
2.11
20 margin%=8 : REM or whatever is
2.11
required
2.11
30 PTR#wp%=&2EF9C
2.11
40 BPUT#wp%,margin%
2.11
50 CLOSE#wp%
2.11
• Taxan Multisync juddering − If you have an A400/1 or A3000 machine
and are using it with a Taxan Multisync monitor, you may experience some
juddering which can be overcome thus:
2.11
A400/1: Fit a molex shunt to link 2. If you do not have a spare shunt,
you can request one from Acorn Customer Services.
2.11
A3000 : Take your machine to your local dealer. The modification is
different from the A400/1 machines and you must not open your machine.
2.11
• Using the Yes/No mouse icon − In order to use the Yes/No mouse icon,
do:
2.11
SWI “OS_Confirm”
2.11
This changes the pointer shape, flushes the mouse buffer, waits until a
key is pressed and then, on exit: R0 = (lowercased) character pressed, C
flag is set if ESCAPE, Z flag set if character is ‘Y’
2.11
• Saving Rom Sprites − To save rom sprites as a standard file, do:
2.11
SYS“Wimp_BaseOfSprites” TO roms%
2.11
SYS“OS_SpriteOp”,524,roms%,“filename”
2.11
Save this as a BASIC program and double click it from the desktop.
2.11
• Memory Re-allocation − You can re-allocate memory for spritesize,
screensize etc. by loading a module called MEMALLOC. This can be found
on Application Disc 2 in directory $.!Lander.
2.11
• Hourglass − The following SYS calls affect the hourglass. Note that
the hourglass is nested, so if you have turned it on twice it must be
turned off twice.
2.11
SYS“HourGlass_On” − Display Hourglass
2.11
SYS“HourGlass_Off” − Remove Hourglass
2.11
SYS“HourGlass_percentage”,number − Display Hourglass & percentage below.
2.11
SYS“HourGlass_Smash” − Remove all hourglasses
2.11
SYS“HourGlass-LEDs”,%AB − Where A is the top LED, B is the bottom LED
2.11
SYS“HourGlass_On” has a delay of 1/3 sec before actually appearing. To
make the delay the value of r0 use:
2.11
SYS“HourGlass_Start”
2.11
• Tiny directories − The adjust button on a tiny directory opens the
application and removes that tiny directory.
2.11
• RISC-OS Speedup − The following calls speed up the machine ROMs from
4Mhz to 8Mhz. Try them at your own risk. (Although under Arthur they
caused crashes, they seem to work OK under RISC-OS) The first switches
to higher speed, the second resets it:
2.11
SYS“OS_UpdateMEMC”,64,64
2.11
SYS“OS_UpdateMEMC”,,64
2.11
• Terramex Cheat − For infinite lives, when you first load the game,
type in “SUBJECTTOCHANGE” on the loading screen.
2.11
• RISC-OS Bugs − Yes, already folk have found begun to find bugs in
RISC-OS.
2.11
1) Module files which show up for *cat as modules but are dated 2:27
1901 do not get a module icon in a filer window − this is a property of
unstamped files from AASM/OBJASM.
2.11
2) Edit does not work properly in modes 2,4 or 5. (But who would want to
do so?! Ed.)
2.11
3) You can drag a directory into itself creating an copy within a copy
until disc space runs out. (Could that be the answer to the ‘library
virus’ in the Help!!! section? Ed.)
2.11
4) Resizing the interactive help window can cause the mouse pointer to
move autonomously up the screen. Try it: Hold button down and resize it,
keep holding, and it will go for a certain window size always.
2.11
• MaxGammon under RISC-OS − If you have a copy of this game, the
author has a version which works in the desktop. Send your original disk
and a S.A.E. to 11 Maryland, Barkham, Wokingham, Berkshire RG11 4PB and
you can have an upgrade to the newer version.
2.11
• Last line in program − To find the last line in a BASIC program
which is in memory, hold down <ctrl>+<shift> and then press <escape>
twice.
2.11
• Hearsay Problems − It is still possible to select a route from the
screen when in a scrolling terminal, but it must be a ‘long’ click. A
short click tries to home the cursor to where the pointer is by sending
a string of control codes. The answer is to hold the button down a bit
longer or use the keyboard.
2.11
If you have problems with Xmodem make sure that Vasscomm is turned off.
2.11
• Filer_OpenDir − When using Filer_OpenDir, it is important to get the
full pathname correct. For instance, if your hard disc has the name
‘Fred’ and you want to open the directory $.Foo, you should use:
2.11
*Filer_OpenDir adfs::Fred.$.Foo
2.11
and not something like:
2.11
*File_OpenDir adfs::4.Foo
2.11
The reason is that when you click on the drive icon, the Filer checks
the list of open windows to see if the requested pathname is already
visible. Unfortunately it is not too intelligent about this, and if the
names do not match exactly, the Filer will open another window. This
will have the side effect that when Dismount is used only windows with
the first pathname will be closed.
2.11
• Legal Text Scaling for Multisyncs − Richard Averill’s hint last
month (Archive 2.10 pp 19/20) to help rescale text in multisync modes
could be done more legally using:
2.11
VDU 23,17,7,flags,x;y;0,0
2.11
flags => bit 0 = not implemented
2.11
bit 1 = 1 => set size of VDU 5 characters
2.11
bit 2 = 1 => set size of VDU 5 spacing
2.11
10 REM > CharSize Demonstration
2.11
of changing character size
2.11
20 REM By Martin Simmons 10/07/89
2.11
30
2.11
40 MODE 12
2.11
50
2.11
60 VDU 5:CLS:PRINT‘’
2.11
70 GCOL 1
2.11
80 PROCprint(8,16,“Double height”)
2.11
90 PRINT
2.11
100 GCOL 2
2.11
110 PROCprint(16,8,“Double width”)
2.11
120 PRINT
2.11
130 GCOL 3
2.11
140 PROCprint(16,16,“Double size”)
2.11
150 PRINT
2.11
160 GCOL 5
2.11
170 PROCprint2(8,8,16,16,“Double
2.11
spaced“)
2.11
180 GCOL 7
2.11
190 PROCprint(8,4,“Mangled half
2.11
height“)
2.11
200 PRINT‘’
2.11
210 GCOL 6
2.11
220 PROCprint(120,120,“BIG”)
2.11
230 VDU 4
2.11
240 END
2.11
250
2.11
260 DEF PROCprint(X%,Y%,text$)
2.11
270 VDU 23,17,7,6,X%;Y%;0,0
2.11
280 PRINT text$
2.11
290 ENDPROC
2.11
300
2.11
310 DEF PROCprint2(X%,Y%,sx%,sy%
2.11
,text$)
2.11
320 VDU 23,17,7,2,X%;Y%;0,0
2.11
330 VDU 23,17,7,4,sx%;sy%;0,0
2.11
340 PRINT text$
2.11
350 ENDPROC
2.11
2.11
• ARM assembler T option − Martyn Lovell says that although the
assembler sees the T option for the LDR mnemonic the same as the !
option (Archive 2.10 p 9), it is not used in the same way. The ! option
should be used to force write back with pre-indexed addressing while the
T option should be used with post-indexed addressing to cause the -TRAN
pin on the ARM to go low for the duration of the data transfer. This is
used by an OS in non-user modes to allow the OS to generate a user-mode
address.
2.11
• ALTernative keys − The RISC-OS Inter-nationalKeyboard module
provides the facility for typing control characters by holding down
<alt> and typing the number on the numeric keypad. In addition, the
following keys produce symbols when pressed with <alt> held down:
2.11
1 gives 1 2 gives 2 3 gives 3 ~ gives Â
2.11
9 gives ± 0 gives û , gives x . gives Ö
2.11
R gives ¨ Y gives ´ S gives ¤ Z gives Ç
2.11
X gives È C gives ¢ M gives µ
2.11
shifted C gives ©
2.11
Other keys return nothing. The old Arthur effect of using
<ctrl><shift><alt> to add 128 to the code can be produced by RMKILLing
this module. Doing this will also allow the use of <alt> plus a cursor
key in the BASIC Editor which does not work with this module installed.
2.11
• Colour cursor for the BASIC Editor − Here is a little program which
will alter the ArmBE module so that you can change the colour of the
cursor.
2.11
10 REM > ColourEdit Make a colour
2.11
cursor for the BASIC Editor
2.11
20 REM By Martin Simmons 11/07/89
2.11
30 REM I use yellow background,
2.11
blue foreground, red cursor
2.11
(1=6 EOR 7)
2.11
40
2.11
50 colour%=6 :REM **** CHANGE
2.11
THIS LINE TO CHANGE THE
2.11
COLOUR (EOR 7) ****
2.11
60 DIM buf% &10000
2.11
70 OSCLI “Load :App2.Modules.
2.11
BasicEdit “+STR$~buf%
2.11
80 P%=buf%+&81E4
2.11
90 [ SWI &100+colour% ;Change
2.11
background palette
2.11
100 ]
2.11
110 zi%=buf%+&8320:zi%+=8+4*
2.11
((!zi%<<8)>>8)
2.11
120 wind%=buf%+&8310:wind%+=8+4*
2.11
((!wind%<<8)>>8)
2.11
130 P%=buf%+&8310
2.11
140 [ SWI “OS_WriteS”
2.11
150 EQUB 17 : EQUB 128+colour%
2.11
;Set background colour
2.11
160 EQUB 12 ;Clear screen
2.11
170 EQUB 23 : EQUB 16 : EQUB 1
2.11
;Set cursor movement
2.11
180 EQUS STRING$(4-(P% AND 3)
2.11
,CHR$0)
2.11
190 BL zi%
2.11
200 BL wind%
2.11
210 ]
2.11
220 INPUT‘“Enter new file name for
2.11
the editor: “file$
2.11
230 OSCLI “Save ”+file$+“ ”+STR$
2.11
~buf%+“ +94B4”
2.11
240 OSCLI “SetType ”+file$+“ FFA”
2.11
2.11
• Wild card copy for RISC-OS − The destination parameter of the *Copy
command now has greater freedom regarding wild cards i.e. wildcards in
the destination can be used even though they were not used for the
source
2.11
e.g. *COPY :0.Text :1.* is now valid.
2.11
• RISC-OS disc names − It is possible to set a system variable which
will behave like a disc name. If you *Set <discname>$Path <filepath> you
can then access you files by :<discname>.<filename>. For example:
2.11
*Set W App1:$.
2.11
*Run W:!Edit
2.11
You can even define several paths, just like File$Path and Run$Path:
2.11
*Set W App1:$.,App2:$.
2.11
*RMLoad W:Modules.BasicEdit
2.11
*Run W:!Edit
2.11
• Memory Usage − Gerald Fitton − Of course, the ‘best’ machine has
both hard disc and 4Mb of memory, but some hard disc machines have less
memory. If you have the ‘best’ then you will probably put all the
!(application) directories that you use in your root ($) directory for
instant access. When you click on the :4 icon in the icon bar, all your
application !Boot files will be RUN and memory will be allocated to each
application (so that it is instantly available). This is true even when
the applications are not installed on the icon bar. If you have less
memory, say 1Mb, then you may find that your dormant applications are
using up too much memory for some of the more sophisticated appli
cations. The solution is to put your applications not in the root
directory but in a (non-!) sub-directory. For example, !Patience can be
put together with !Zarch in a games directory, where Games is in the
root directory. This way, only when you open the Games directory (by
double clicking on it) will you use up memory on the dormant appli
cations !Patience and !Zarch.
2.11
• 1st Mail solution − When using 1st Mail in RISC-OS, the printer
options are hidden underneath another window. Mr Burrows has solved the
problem by altering the template file:
2.11
*Load $.Resources.1wp.
2.11
1ml_templa 9000
2.11
!&9AA8=155
2.11
!&9AB0=1023
2.11
*Save $.Resources.1wp.
2.11
1ml_templa 9000+AEA
2.11
*SetType $.Resources.1wp
2.11
.1ml_templa FFF
2.11
• RISC-OS Hints and Tips − S C Costin − When using !PrinterDM on the
Desktop to print a text file, if the printer and Archimedes are set up
where there are no ignore characters configured, i.e. can be checked as
follows:
2.11
F12 ;Press function key 12 from desktop
2.11
*status ignore ;Enter command
2.11
No ignore ;Returned after entering command
2.11
The problem is that the line feed is suppressed and therefore over-
printing occurs. This is easily overcome by clicking on the !PrinterDM
icon on the icon bar, which produces a window, and selecting CR or LF
conversion.
2.11
A more permanent solution is to edit the file PrData. To do this hold
shift key while clicking on the application directory !PrinterDM, then
drag PrData icon over Edit icon on the icon bar and release the mouse
button. At the end of the printer driver data change line: from 0 to 1
i.e. change line:
2.11
0;0/1 1=>convert CR or LF to CR,LF
2.11
to:
2.11
1;0/1 1=>convert CR or LF to CR,LF
2.11
• Pipedream conversion to ADFS E type floppy disc by S C Costin
2.11
1) Format new disc using the new E format.
2.11
2) Name the new disc NewPd.
2.11
3) Backup your original copy to the disc NewPd, using *COPY to retain
E format.
2.11
4) Copy the !PipeDream application from the support disc to the root
directory of disc NewPd.
2.11
5) Copy the Floating Point Emulator module from directory
!System.Modules on Application Disc 1 into directory $.!PipeDream on
disc NewPd.
2.11
6) Delete $.!boot
2.11
7) Delete $.piped.fpe2
2.11
8) Delete $.rs423drive
2.11
9) Add the following obey file called $.!boot
2.11
| > $.!boot
2.11
*quit
2.11
RUN $.!pipedream.!run
2.11
10) Leave the !PipeDream.!boot file as copied from the support disc.
2.11
| > !PipeDream.!Boot
2.11
Set PipeDream$Dir <Obey$Dir>
2.11
Set Alias$@RunType_DDE Run <PipeDream$Dir>.!Run %%*0
2.11
Set File$Type_DDE PDream
2.11
IconSprites <PipeDream$Dir>
2.11
.!Sprites
2.11
11) If mouse cursor control is required insert lines 7 & 8 in the !Run
Obey file as follows:
2.11
| > !PipeDream.!Run
2.11
Set PipeDream$Dir <Obey$Dir>
2.11
WimpSlot -min 450k
2.11
||RMReInit InternationalKeyboard
2.11
RMKill InternationalKeyboard
2.11
RMEnsure FPEmulator 2.60
2.11
RMLoad <Obey$Dir>.FPEmulator
2.11
$.piped.cursorrm
2.11
mousecursor on 13 &c5 131
2.11
Set Alias$@RunType_DDE Run <PipeDream$Dir>.!Run %%*0
2.11
Set File$Type_DDE PDream
2.11
IconSprites <PipeDream$Dir>
2.11
.!Sprites
2.11
Load $.Library.pd 8000
2.11
Echo <26>
2.11
Pointer 0
2.11
Go 8000 ; %*0
2.11
• Update for Artisan and ProArtisan − Clares have now produced an
application which will up-date your Artisan and ProArtisan discs for
RISC-OS. It has been put on both this month’s and last month’s program
discs. Many thanks to Duncan Burbridge, Kimba, Australia (age 12) who
also sent us information on updating Artisan for RISC-OS.
2.11
• Not enough screen memory? − If a program expects to run in a
specific screen mode and not enough screen memory is available, it will
usually report a ‘Bad Mode’ error when run from the desktop, as the
screen memory can’t be expanded dynamically once the application has
started. This can be fixed by either dragging the screen memory bar in
the task window, or by entering the appro-priate mode first. A much
more elegant way is to add the following line to the Obey file that
starts the program: Echo <22><n> Where <n> is the mode. This ensures
that the screen memory is allocated before the application starts and
should appear before the *WimpSlot command.
2.11
• Uncluttered cataloging − RISC-OS has a neat way of searching a disc
without cluttering the screen. Use <adjust> to open a directory and it
closes the one you were in, leaving only the new dir-ectory on the
screen. To move back up the tree, click <adjust> on the close icon, and
the next directory up will appear, closing the current directory (unless
you are in the root directory, of course!).
2.11
• Bye bye hard disk! − The RAM disc is fantastic but not much use on 1
Mbyte machines. Also, note that when RAMFS is selected *bye does not
park the head of the Winchester − so beware!!!
2.11
• Archive Bulletin Board − This month’s password is “ARCAM” − which is
apparently the name of Alan Glover’s hi-fi system!
2.12
• Arthur 1.2 desktop − Nick Furniss has converted the Arthur 1.2
desktop so that it works under RISC-OS. If you are interested, you
should contact him at 87 Moordale Avenue, Bracknell, RG12 1TG.
2.12
• Datachat Modem connections − These connect-ions were sent in by P
Carlson who is happily using the Datachat to connect to Prestel.
2.12
Archimedes Datachat
2.12
2 5
2.12
3 1
2.12
5 3
2.12
Pins 2 & 3 on the Datachat are linked together and pins 1, 6 and 8 are
linked on the Archimedes.
2.12
• First Word Plus − Volker Eloesser of West Germany, in response to
Help needed 2.11, p.15, concerning First Word Plus:
2.12
1) This sounds as if the printer is configured to a shorter paper length
than the computer. If the computer sends a page which is one line longer
than the configured length, the printer will feed the next full page
after receiving a form-feed command. If the reconfiguration of the
printer does not work, change the FormFeed command in the printer driver
(HEX-file) to a no-operation code, such as ‘00’ or ‘*’ and compile a new
CFG-file.
2.12
2) Simply close the window by clicking on the close-symbol on the top-
left corner of the text window before printing.
2.12
• First Word Plus word-count − The word count in First Word Plus does
not work properly! It counts a word which contains an apostrophe as two
words e.g. I’m or it’s. This was very embarrassing for one Archive
reader, who insisted to his publisher, that he had written a certain
number of words.
2.12
• Graphic Writer bug − If you insert a block marker at the end of a
document, it is possible to scroll past the ‘End’ point. This is usually
remedied by scrolling back but if you continue editing it is possible to
crash the application by pressing <ctrl><down arrow> followed by <page
down> or <page up>. So be careful.
2.12
• Home Accounts − Just a quick comment on Alan Highet’s Home Accounts
review in 2.10 − one of his criticisms is that the reporting is limited
to a whole year’s transactions thus possibly taking up lots of paper;
whilst this is true, report output can, under RISC-OS, be dragged
directly into !EDIT and then you can print bits needed. Not ideal, but
a solution.
2.12
Also he says that transactions are deleted after a year − this is not
completely true − only the last 12 months transactions can be graphed
and edited, but all transactions are kept for viewing in the account/
header windows. Brian Debenham
2.12
• Prolog X − We have a hint & tip on “Retaining facts, rules and lists
produced in Prolog X” written by C.G.Williamson. It was fairly long and
rather technical, so we did not print it. If anyone would like a copy of
this, please send an SAE to Adrian Look at the Archive office. (We have
just received a letter from Jim Davis who says that he would like to
commend Chris for his “brilliantly simple use of the Prolog built-in
predicates ‘tell’ and ‘told’.” He quotes several learned texts and says
that they all miss Chris’ simple combination of ‘tell’, ‘listing(X,Y)’,
‘told’ as a method of avoiding the very contrived, but hitherto common,
use of ‘tell’ and ‘told’. He believes that Chris’ expedient will become
standard.) Should we therefore publish Chris’ comments? Are there many
Prolog users out there? Ed.)
2.12
• QL Reader − Brian Oliver points out that there is a problem with
QLreader (Shareware 12) in its drive select. Otherwise it is excellent
and it now works fine with my 5.25“ drive connected to slot :2 after the
following modification. The SYS ”ADFS_DiscOp“ command on line 2750 is
wrong. It should be:-
2.12
SYS “XADFS_DiscOp”,,(1+List%<<6),
2.12
Start%+(drive%<<29),bf%,512 TO flags%
2.12
It is then necessary to set the default drive on line 240 and those for
selection on lines 19740 & 1950.
2.12
• RS423 Archimedes to Beeb − J.O.Linton: I have been having trouble
with my RS423 port. My Beeb would listen to my Archimedes but my
Archimedes would not receive data correctly from my Beeb. I have a
fairly early Archimedes so I went to some trouble to get the field
modification done to the serial chip only to find that the fault was
exactly as before. Then my dealer sent me a leaflet from Acorn (Part No.
0476.033) called ‘Using the serial port’ in which I found this vital
paragraph:
2.12
‘The Acorn BBC model B uses one stop bit by default, whereas the default
configuration of an Archimedes computer is two stop bits. You are
advised to change the DATA configuration of your Archimedes computer to
5 if you are using your serial port to pass data to or from a BBC model
B.’
2.12
*Configure DATA 5 and Hey Presto − it worked!
2.12
• Systemdevs − When using the System Devices to send characters to the
printer, the printer ignore character feature is not ‘used’, and all
characters are sent to the printer − including the printer ignore
character. This is very useful for sending an alternative character set
to the printer (if it has a user-defined graphics option) as no
characters will be ‘stripped’ − rather like using VDU 1,char with the
VDU drivers. All that needs to be done is give a command similar to:
*COPY UserChars printer: ~C~V. Michael Ben-Gershon
2.12
• Teletext Adaptors − Richard House has written some software which
allows the Archimedes to “grab” teletext pages using the Acorn Teletext
adaptor. If any one is interested, we can put you in touch with him.
2.12
Herman Stevens from Belgium, says that in order to get the Morley
teletext adaptor to work with RISC-OS, you require: I/O podule, Soft’s
“Support” and “ATS” saved on ADFS disc, !65Host copied on the same disc
and !boot file as follows:
2.12
CLS
2.12
*DIR !65Host
2.12
*RMLoad !RunImage
2.12
*CACHEROM 1 ADFS
2.12
*CACHEROM 3 SUPPORT
2.12
*CACHEROM 4 ATS
2.12
*EMU.
2.12
By typing “TTEXT” you can start the Support ROM and TELETEXT will start
the ATS ROM.
2.12
• Taxan Multisync wobbles − The hint last month was expressed in
rather too technical language. I’ll try again.
2.12
Look at the p.c.b. from the front of the computer and near the serial
port socket you will see a couple of metal pins sticking up and on the
board alongside it, the inscription “LK2”. Then over to the left of
that, about in line with the headphone socket is a set of five pairs of
pins inscribed as “PL2”. It should have a couple of black plastic/metal
sleeves on it. These are spare metal shorting links. Slide one of these
links off (upwards) and put it instead on LK2. That should do the trick.
2.12
• Compressing Text with OS_PrettyPrint − Under RISC-OS, the
‘OS_PrettyPrint’ SWI (c.f. Archive 2.9 p9) has been extended to include
a ‘dictionary’ facility. When an ASCII <27> code is encountered, the
next byte will be used to find (and print) a dictionary entry. For
example:
2.12
Consider the following dictionary:
2.12
1) Hello
2.12
2) this
2.12
3) is
2.12
4) Archie
2.12
If you send the codes <27><4> to the OS_Pretty Print SWI, tthe text
‘Archie’ will be printed.
2.12
The two bytes <27><4> replace the 5 bytes <65> <114><99><104><101> which
we actually want printed. The operating system uses this feature to
compress any strings it might need to print.
2.12
The structure of a dictionary is shown below:
2.12
<entry length> }
2.12
<string> } repeat
2.12
<0> }
2.12
.
2.12
.
2.12
<0> ; end of of dictionary
2.12
Therefore to print an OS_PrettyPrint SWI, you must use the following
entry parameters:
2.12
r0 -> pointer string
2.12
r1 -> pointer dictionary (0 -> system dictionary)
2.12
r2 -> special string (printed if dictionary entry zero is accessed)
2.12
10 REM >PrettyPrt
2.12
20
2.12
30 REM ****************************
2.12
40 REM * Using the OS_PrettyPrint *
2.12
50 REM * Dictionary Facility *
2.12
60 REM * by Adrian Philip Look *
2.12
70 REM * 21st August 1989 *
2.12
80 REM ****************************
2.12
90
2.12
100 DIM dictionary% &400:REM allocate
2.12
some space for the dictionary
2.12
110 DIM buffer% 3 : REM allocate some
2.12
space for the string
2.12
120
2.12
130 PROCsetupdictionary :REM make a
2.12
user dictionary
2.12
140
2.12
150 buffer%?0=27 : REM a dictionary
2.12
entry follows
2.12
160 buffer%?2=0 : REM terminate
2.12
OS_PrettyPrint string
2.12
170 FOR x%=0 TO 5
2.12
180 buffer%?1=x% : REM dictionary
2.12
entry x%
2.12
190 PRINT’x%;“ : ”;
2.12
200 SYS “OS_PrettyPrint”,buffer%,
2.12
dictionary%,“<special string>” +CHR$(0)
2.12
210 NEXT x%
2.12
220 PRINT‘
2.12
230 END
2.12
240
2.12
250 DEFPROCsetupdictionary
2.12
260 x%=dictionary%
2.12
270 READ s$
2.12
280 WHILE s$<>“***”
2.12
290 x%?0=LEN(s$)+2:REM entry length
2.12
300 $(x%+1)=s$+CHR$(0) :REM null
2.12
terminated string
2.12
310 x%+=LEN(s$)+2
2.12
320 READ s$
2.12
330 ENDWHILE
2.12
340 ?x%=0 : REM zero length string to
2.12
terminate dictionary
2.12
350 ENDPROC
2.12
360
2.12
370 DATA Hello,this,is,Archie,“***”
2.12
2.12
• Copy Options − In Archive 2.10 page 15 we said that there were two
new copy options L and N. In fact there are five new options, the other
three being:
2.12
A − Force destination access to same as source
2.12
S − Restamp datestamped files after coping
2.12
T − Only copy the directory structure
2.12
• Filer_OpenDir and Filer_CloseDir (cont’d) − Gary Atkinson says that
these commands do not use system variables and so the full directory
name must be used every time. This makes life difficult for RISC-OS
applications which want to open a Filer window relative to their present
position on the disc (which may change e.g. hard disc users).
2.12
Therefore, with this context in mind, Gary has sent in the following
hint which will read the value of a system variable:
2.12
DIM buffer% 255, temp% 255
2.12
SYS “OS_CLI”,“Filer_OpenDir ” + FNread_system_variable(“Obey$Dir”)
2.12
END
2.12
:
2.12
DEFFNread_system_variable(v$)
2.12
LOCAL len%,x%
2.12
$buffer%=v$
2.12
SYS “OS_ReadVarVal”,buffer%,temp%
2.12
,255,0,3 TO ,,len%
2.12
v$=“”
2.12
FOR x%=0 TO len%-1
2.12
v$+=CHR$(buffer%?x%)
2.12
NEXT x%
2.12
=v$
2.12
• Mode 16, 17 and 24 co-ordinates − Under RISC-OS modes 16 and 17 now
support graphics. This means that a resolution of 1056x256 can now be
obtained on a normal monitor. However, it should be noted that the
screen size, in OS co-ordinates, is not 1280x1024 (or even 2048x1024 as
Richard Averill suggested last month) but 2111x1024. In order to convert
between the two sizes you should use the following function:
2.12
DEFFNconvert2111to1280(x%)
2.12
=INT(33*(x%+0.5)/20)
2.12
• Modifying !Calc to accept keyboard input − In order to modify the
calculator on the Applications Disc 2 to accept keyboard input you must:
2.12
1) Leave the desktop and type *BASIC.
2.12
2) Mount Applications Disc 2 in drive 0.
2.12
3) LOAD “!Calc.!RunImage” and make the follow-ing modifications:
2.12
Add the following lines:
2.12
315 WHEN 8 : PROCwndkeyprssd(!q%,
2.12
q%!24)
2.12
750 DEFPROCwndkeyprssd(handle%
2.12
,key%) : IF key%>47 AND key%<5 THEN PROCdigit(CHR$(key%))
2.12
751 CASE key% OF
2.12
752 WHEN 42: PROCoperator(“*”)
2.12
753 WHEN 43: PROCoperator(“+”)
2.12
754 WHEN 47: PROCoperator(“/”)
2.12
755 WHEN 46: PROCpoint
2.12
756 WHEN 45: PROCoperator(“-”)
2.12
757 WHEN 95: PROCoperator(“-”)
2.12
758 WHEN 61: PROCoperator(“=”)
2.12
759 ENDCASE
2.12
Now renumber the program (just type RENUMBER <return>), and then
type:
2.12
855 PROCupdate(calc%,12,-28-32,10
2.12
*16+12,24):PROCcalc:ENDPROC
2.12
105 q%!60=15<<12
2.12
4) SAVE “!Calc.!RunImage”
2.12
To use text with the modified calculator just click in the calculator
window (not on an icon) and type away. Note that a caret will not
appear.
2.12
• New CMOS RAM settings for outline fonts − When using the outline
font manager (which is supplied with the Acorn DTP) you can set various
font cache thresholds. These thresholds govern which mode of caching is
used i.e. vertical & horizontal subpixeled, cached outlines, anti-
aliased outlines, non-exact font from x90y45, and ‘auto-grow’ cache.
2.12
The various thresholds can be set up as follows:
2.12
*Configure FontSize <n>k ; min size of cache
2.12
*Configure FontMax <n>k ; max size of ‘auto-grow’ cache
2.12
*Configure FontMax1 <h> ; max size of non-exact font x90y45
2.12
*Configure FontMax2 <h> ; max size of anti-aliased outlines
2.12
*Configure FontMax3 <h> ; max size of cached outlines
2.12
*Configure FontMax4 <w> ; max size of horizontally-subpixeled font
2.12
*Configure FontMax5 <h> ; max size of vertically-subpixeled font
2.12
where <h> refers to maximum font pixel height (pixel height = point
height * dpi / 72), and <w> to the maximum font pixel width.
2.12
Some programs may corrupt the CMOS RAM and soil the font cache
thresholds. This may dramatically reduce the efficiency of cached fonts.
Use the *STATUS command to view your currents threshold settings (and
make a note of them just in case the CMOS RAM gets corrupted).
2.12
• New FPE − There is a new version of the floating pointer emulator
provided on the Applications Disc 2. If any of your programs use older
versions of the FPE, you should update the module. This is because the
pre 2.60 release versions of the FPE have a bug (a badly formed module
header) which happens to work under Arthur 1.2.
2.12
• New system variable − There is a new system variable, called
Font$Path, which tells the Archimedes where anti-aliased fonts can be
found. It has the same syntax as Load$Path and Run$Path. This means that
fonts can be accessed from several different directories e.g. *Set
Font$Path $.Fonts1, $.Fonts2,$.Fonts3 will allow the fonts manager to
access anti-aliased fonts from three directories $.Font1, $.Font2 and
$.Font3. To remain compatible with the earlier versions of the font
manager you can *Set Font$Path <Font$Prefix>.
2.12
• OS_ChangedBox − RISC-OS now offers a facility which will keep track
of the areas on the ‘screen’ which have been altered by calls to the VDU
drivers. When enabled, this feature will pro-vide a rectangle (co-
ordinates in pixels from the bottom left-hand corner) of the area on the
‘screen’ which has been changed. The parameters are:
2.12
Entry:
2.12
R0 = 0 -> disable changed box calculations
2.12
= 1 -> enable changed box calculations
2.12
= 2 -> reset changed box to null rectangle
2.12
= -1 -> read changed box info
2.12
Exit:
2.12
R0 = old enable state
2.12
R1 points to a fixed block of 5 words
2.12
[R1, #0] = disable/enable flag
2.12
[R1, #4] = x-coordinate of left edge of box
2.12
[R1, #8] = y-coordinate of bottom edge of box
2.12
[R1, #12] = x-coordinate of right edge of box
2.12
[R1, #16] = y-coordinate of top edge of box
2.12
An example program:
2.12
10 REM >Changed
2.12
20
2.12
30 REM *************************
2.12
40 REM * Using OS_ChangedBox *
2.12
50 REM * by Adrian Philip Look *
2.12
60 REM * 22nd August 1989 *
2.12
70 REM *************************
2.12
80
2.12
90 MODE 12 : OFF
2.12
100
2.12
110 PROCenablecalulations
2.12
120 PROCresetrectangle
2.12
130
2.12
140 LINE 400,400,600,600
2.12
150 PROCreadbox
2.12
160 RECTANGLE FILL 300,300,10,10
2.12
170 PROCreadbox
2.12
180 RECTANGLE FILL 700,700,30,30
2.12
190 PROCreadbox
2.12
200 CIRCLE 250,250,200
2.12
210 PROCreadbox
2.12
220 RECTANGLE 550,450,500,300
2.12
230 PROCreadbox
2.12
240
2.12
250 PROCdisablecalulations : ON
2.12
260 PRINT
2.12
270 END
2.12
280
2.12
290 DEFPROCresetrectangle
2.12
300 SYS “OS_ChangedBox”,2
2.12
310 ENDPROC
2.12
320
2.12
330 DEFPROCenablecalulations
2.12
340 SYS “OS_ChangedBox”,1
2.12
350 ENDPROC
2.12
360
2.12
370 DEFPROCdisablecalulations
2.12
380 SYS “OS_ChangedBox”,0
2.12
390 ENDPROC
2.12
400
2.12
410 DEFPROCreadbox
2.12
420 PROCdisablecalulations
2.12
430 SYS “OS_ChangedBox”,-1 TO ,data%
2.12
440 x0%=data%!4: y0%=data%!8
2.12
450 x1%=data%!12 : y1%=data%!16
2.12
460
2.12
470 PRINTTAB(0,0);“Changed Box
2.12
Rectangle (in pixels not
2.12
OS coords)“
2.12
480 PRINT“left x: ”;x0%;“ ”
2.12
490 PRINT“bottom y: ”;y0%;“ ”
2.12
500 PRINT“right x: ”;x1%;“ ”
2.12
510 PRINT“top y: ”;y1%;“ ”
2.12
520
2.12
530 PRINT‘“press any key to step
2.12
through demo“
2.12
540 QQ=GET
2.12
550 PROCenablecalulations
2.12
560 ENDPROC
2.12
• ProArtisan & Artisan upgrades to RISC-OS − ProArtisan discs need to
be changed so that they work under RISC-OS. This upgrade avoids the
dreaded “Filecore in use” error, and is available from Clares Micros if
you send them a blank D-formatted disc.
2.12
• RISC-OS printer drivers and Line Feeds − If your printer does not
automatically generate line feeds when it receives a carriage return you
can make the RISC printer drivers generate one for you. Once the printer
drive is installed on you must click on the printer icon with the SELECT
button. This will reveal a window which contains an option to convert
single line feeds or carriage returns into a single line feed and
carriage return i.e. CR or LF => CR,LF.
2.12
If you wish to make this option permanent just select the ‘Save Choices’
option on the printer driver menu.
2.12
• RISC-OS will run old WIMP programs (i.e. it emulates the Arthur 1.2
Window Manager) but because the emulation is not complete there are some
anomalies with the sprite handling. (a) selected sprites are rendered
incorrectly (b) sprite are scaled according to the screen mode (this did
not happen before). In practice, however, this affects very few
applications.
2.12
• The *CDIR command for the ADFS, RAMFS, and NETFS now creates
unlocked directories. This means that directories can be renamed, moved
and deleted from the desktop. However, the contents of a directory must
be deleted before the directory itself can be deleted.
2.12
• The Window Manager (RISC-OS) no longer reserves 32k permanent memory
for window definitions, etc but acquires memory from the RMA as it is
needed. This means that some Arthur 1.2 wimp programs may fail to start,
giving a ‘No room to create window’ error. This can usually be solved by
increasing the memory allocated to the RMA (by dragging the RMA bar in
the Task Manager) before starting the application.
2.12
The following hints and tips were sent in by Paul Witheridge
2.12
• Cancelling tasks from the “Task Display” − If you call up the Task
Display by clicking the mouse menu button on the Task Manager Icon at
the right-hand end of the icon bar and then selecting Task Display from
the resulting menu, you will get, among other things, a one line display
for each active task, showing the name of the task and how much memory
it uses.
2.12
If you position the pointer on that display line and click menu again,
you will see a very similar menu, but this time there is a menu item for
the task in question. This menu item has a sub-menu arrow. If you move
the pointer onto it, you will be rewarded with a sub-menu with a just a
single item, “Quit”. Clicking on this will usually, but not always,
cause the task to terminate.
2.12
From the programmer’s point of view, the next time the task in question
issues a Wimp_Poll request, it will receive a reason code 18 with a
subordinate code of 8 in the fifth word of the parameter block. It
should interpret this as a directive to terminate.
2.12
• Command files from within an Obey file − One of the main differences
between Command files and Obey files is that input from a Command file
can be passed to the OS Command Line Interpreter or to an application,
while input from an Obey file is only passed to the Command Line
Interpreter. This means that when an application program is started up
by a RUN command in an Obey file, the following line of the Obey file
will always be treated as a command and never as input to the appli
cation program. For example if the following is an Obey file:
2.12
Dir ADFS:$.BasPgms
2.12
BASIC
2.12
Dir ADFS:$
2.12
Then the second DIR command will be executed after quitting from BASIC.
If, instead, the file is a Command file, then as soon as BASIC starts up
it will read the “Dir ADFS:$” as input (and since it does not begin with
an asterisk, it will not understand it and treat it as a mistake).
2.12
You can use a combination of Obey and Command files to start up an
application program and provide it with an initial set of input data.
This can be very useful, but to be successful, you must know a little
more about what happens when a Command file is executed from within an
Obey file. Consider the following example:
2.12
| > ObeyFile
2.12
Echo Output 1 from ObeyFile
2.12
Exec CmndFile
2.12
Echo Output 2 from ObeyFile
2.12
| > CmndFile
2.12
Echo Output from CmndFile
2.12
When the Obey file is run, the following output is produced:
2.12
Output 1 from ObeyFile
2.12
Output 2 from ObeyFile
2.12
* | > CmndFile
2.12
* Echo Output from CmndFile
2.12
Output from CmndFile
2.12
From this output, you can see that despite the fact that the “Exec
CmndFile” command came between the two “Echo” commands in the Obey file,
the contents of the Command file were not actually executed until the
Obey file was finished with. The Command Line Interpreter obviously
gives precedence to Obey files over Command files. All that the EXEC
command did was to open the Command file for input and assign the system
input stream to it. It did not actually read anything from it. This was
left to the Command Line Interpreter, but it did not resume reading from
the system input stream until it had exhausted the Obey file.
2.12
Since application programs can take input from a Command file, but not
from an Obey file, an EXEC command can be used within an Obey file to
“stack” input ready for an application program. The following example of
an Obey file and a Command file can be used to create a RISC-OS
application for the Basic Editor:
2.12
| > !BasicEdit.!Run
2.12
If “<System$Path>” = “” then Error 0 System resources cannot be found
RMensure ARMBasicEditor 1.00 RMload System:Modules.BasicEdit
2.12
Key 2 EDIT .|M
2.12
Key 4 *QUIT|M
2.12
Wimpslot -min 100k
2.12
Exec <Obey$Dir>.!Init
2.12
Basic -load %*0
2.12
*| > !BasicEdit.!Init
2.12
EDIT
2.12
Both files should reside in a application directory called “!BasicEdit”.
An accompanying “!sprites” file would be nice, but is not essential
since in its absence, RISC-OS will use the default sprite for an
application.
2.12
The “Exec <Obey$Dir>.!Init” command in the Obey file opens the Command
file and when the following “Basic -load %*0” command executes, BASIC
reads the contents of the Command file as if it were being entered from
the keyboard.
2.12
If you double-click on the icon for “!BasicEdit” in a directory viewer,
the Basic Editor is started up ready to create a new program. If you
install “!BasicEdit” on the icon bar using TinyDirs, you can drag the
icon for a BASIC program from a directory viewer to the “!BasicEdit”
icon on the icon bar, which will start up the Basic Editor and load the
program into it ready to edit.
2.12
The following example consists of an Obey file and a Command file to
start up Twin as an application and to change the default colours used
by twin from white on black to blue on cyan. The contents of the Obey
file, which is the !Run file in the !Twin application directory, are:
2.12
| > !Twin.!Run
2.12
WimpSlot -min 100k
2.12
Load ADFS:%%.Twin 8000
2.12
Exec <Obey$Dir>.!Init
2.12
Go 8000 ; %*0
2.12
and the contents of the Command file, which is named “!Init” and also
resides in the !Twin directory, are (in the notation used for *BUILD
etc):
2.12
|!|A|S|@|F|@|@|@|S|A|D|@|@|@
2.12
The Obey file assumes that Twin resides in the current ADFS library,
refering to it as “ADFS:%%”. “ADFS” must be specified in case the ADFS
is not the current filing system and “%%” will be replaced by a single
percentage sign by the argument substitution process for Obey files.
Twin is loaded at &8000 because in a RISC-OS multi-tasking environment,
the amount of storage available to start up TWIN is often not enough to
load it at its “normal” load address of &80000 (leading to the dreaded
error message: “No writeable memory at this address”). Note that loading
Twin at &8000 leaves no memory for starting up applications from within
Twin. Such applications would normally run at &8000 and utilise the
memory between &8000 and Twin’s normal load address at &80000).
2.12
The Command file seems to consist of unintelligible hieroglyphics. The
first character (shown as “|!|A”) is actually &81 and has the same
effect on Twin as pressing function key one. The remaining eight
characters (shown as “|S|@|F|@|@|@|S|A|D|@|@|@”) are equivalent to:
2.12
ctrl-S ctrl-@ ctrl-F ctrl-@ ctrl-@ ctrl-@
2.12
ctrl-S ctrl-A ctrl-D ctrl-@ ctrl-@ ctrl-@
2.12
which will have the same effect when read by Twin as the BASIC
statements:
2.12
VDU 19,0,5,0,0,0
2.12
VDU 19,1,4,0,0,0
2.12
mapping logical colour zero to physical colour five (cyan) and logical
colour one to physical colour four (blue).
2.12
As in the case of !BasicEdit, double clicking on the !Twin icon in a
directory viewer will start up Twin without any file loaded, while
installing !Twin on the icon bar via TinyDirs will allow dragging file
icons to the !Twin icon on the icon bar, starting up Twin and loading
the file.
2.12
• Error signalling from within a machine code subroutine called from
BASIC −Under BASIC V version 1.04, it is simple to signal an error
condition from a machine code subroutine by setting the over-flow flag
and loading register zero with a pointer to an error block before
returning to BASIC.
2.12
Consider these two, almost identical examples:
2.12
The first assembles and calls a machine code subroutine that points
register zero to an error block (see line 70) and then returns to BASIC
with the overflow flag cleared (see line 80). This program terminates
normally without an error:
2.12
10 REM > Example1
2.12
20
2.12
30 DIM code% 100
2.12
40 FOR pass% = 0 TO 3 STEP 3
2.12
50 P%=code%
2.12
60 [OPT pass%
2.12
70 ADR R0,errblk
2.12
80 BICS PC,R14,#&10000000
2.12
90 .errblk EQUD 99
2.12
100 EQUS “I am an error message”
2.12
110 EQUB 0
2.12
120 ]:NEXT
2.12
130 ON ERROR PROCerror
2.12
140 CALL code%
2.12
150 END
2.12
160 :
2.12
170 DEF PROCerror
2.12
180 PRINT “Nmbr=”; ERR
2.12
190 PRINT “Text=”; REPORT$
2.12
200 PRINT “Line=”; ERL
2.12
210 END
2.12
220 ENDPROC
2.12
The second example is exactly the same except that it sets the overflow
flag (see line 80) before returning to BASIC:
2.12
10 REM > Example2
2.12
20
2.12
30 DIM code% 100
2.12
40 FOR pass% = 0 TO 3 STEP 3
2.12
50 P%=code%
2.12
60 [OPT pass%
2.12
70 ADR R0,errblk
2.12
80 ORRS PC,R14,#&10000000
2.12
90 .errblk EQUD 99
2.12
100 EQUS “I am an error message”
2.12
110 EQUB 0
2.12
120 ]:NEXT
2.12
130 ON ERROR PROCerror
2.12
140 CALL code%
2.12
150 END
2.12
160 :
2.12
170 DEF PROCerror
2.12
180 PRINT “Nmbr=”; ERR
2.12
190 PRINT “Text=”; REPORT$
2.12
200 PRINT “Line=”; ERL
2.12
210 END
2.12
220 ENDPROC
2.12
In this second case, an error occurs, which is trapped by the ON ERROR
statement (see line 130) and results in the following lines being
printed by PROCerror:
2.12
Nmbr=99
2.12
Text=I am an error message
2.12
Line=140
2.12
This use of the overflow flag can result in unexpected behaviour from
some programs. For example, if the last SWI call in a machine code
subroutine returns with the overflow flag set, indicating an error
occurred during the execution of the SWI, and this flag is not reset
before the subroutine returns to BASIC, then BASIC will take this as an
error condition. Exactly what happens depends on the contents of
register zero. If it points to a valid error block, then BASIC’s error
trapping mechanism will function properly. Otherwise unpredictable
errors (such as an address exception) will happen.
2.12
• New SWI calls in RISC-OS − The following program can be used to list
all the SWI calls available in OS. It basically works by calling the
“OS_SWINumberToString” SWI for all possible SWI numbers and displaying
the returned string. To speed things up it checks to see if the first
SWI in a each chunk of 64 is valid. If not, it ignores the rest of the
chunk. “Valid” in this case means that the SWI name is neither
“OS_Undefined” nor “User”. SWI names beginning with “X” are also ignored
as duplicates.
2.12
10 REM > SWIlist
2.12
20 :
2.12
30 buflen%=100
2.12
40 DIM buffer% buflen%
2.12
50 :
2.12
60 SYS “OS_SWINumberFromString”,,
2.12
“XOS_SWINumberToString” TO S%
2.12
70 :
2.12
80 VDU 14
2.12
90 :
2.12
100 FOR chunk% = 0 TO &80000 STEP 64
2.12
110 SYS S%,chunk%,buffer%,buflen%
2.12
TO ,swi$;V%
2.12
120 IF V%AND1 ELSE IF LEFT$(swi$,1)
2.12
=“X” ELSE IF swi$ =“User” ELSE IF swi$<>“OS_Undefined” PROCchunk
2.12
130 NEXT
2.12
140 :
2.12
150 VDU15
2.12
160 :
2.12
170 END
2.12
180
2.12
190 DEFPROCchunk
2.12
200 FOR swi% = chunk% TO chunk%+63
2.12
210 SYS S%,swi%,buffer%,buflen% TO
2.12
,swi$;V%
2.12
220 IF V%AND1 ELSE IF LEFT$(swi$,1)
2.12
=“X” ELSE IF swi$=“User” ELSE IF swi$<>“OS_Undefined” PRINT “SWI number
”;RIGHT$(“0000”+
2.12
STR$~swi%,5);“ is ”;swi$
2.12
230 NEXT
2.12
240 ENDPROC
2.12
If this program is run, a list of SWIs is generated. Those for the
FPemulator and ColourTrans will only be listed if the relevant Relocat
able Module is loaded when SWIlist is run. Those for RamFS will only be
listed if the RAM disc is configured.
2.12
The program was also run against Arthur 1.2 and by comparing the two
listings, it was possible to identify those SWIs which appeared in the
RISC-OS listing but not in that for Arthur. These are presumably new
SWIs and are listed below.
2.12
00049 OS_ReadArgs
2.12
0004A OS_ReadRAMFsLimits
2.12
0004B OS_ClaimDeviceVector
2.12
0004C OS_ReleaseDeviceVector
2.12
0004D OS_DelinkApplication
2.12
0004E OS_RelinkApplication
2.12
0004F OS_HeapSort
2.12
00050 OS_ExitAndDie
2.12
00051 OS_ReadMemMapInfo
2.12
00052 OS_ReadMemMapEntries
2.12
00053 OS_SetMemMapEntries
2.12
00054 OS_AddCallBack
2.12
00055 OS_ReadDefaultHandler
2.12
00056 OS_SetECFOrigin
2.12
00057 OS_SerialOp
2.12
00058 OS_ReadSysInfo
2.12
00059 OS_Confirm
2.12
0005A OS_ChangedBox
2.12
0005B OS_CRC
2.12
0005C OS_ReadDynamicArea
2.12
0005D OS_PrintChar
2.12
000EB OS_ConvertFixedFileSize
2.12
000EC OS_ConvertFileSize
2.12
00240 IIC_Control
2.12
40098 Font_ReadColourTable
2.12
400DE Wimp_StartTask
2.12
400DF Wimp_ReportError
2.12
400E0 Wimp_GetWindowOutline
2.12
400E1 Wimp_PollIdle
2.12
400E2 Wimp_PlotIcon
2.12
400E3 Wimp_SetMode
2.12
400E4 Wimp_SetPalette
2.12
400E5 Wimp_ReadPalette
2.12
400E6 Wimp_SetColour
2.12
400E7 Wimp_SendMessage
2.12
400E8 Wimp_CreateSubMenu
2.12
400E9 Wimp_SpriteOp
2.12
400EA Wimp_BaseOfSprites
2.12
400EB Wimp_BlockCopy
2.12
400EC Wimp_SlotSize
2.12
400ED Wimp_ReadPixTrans
2.12
400EE Wimp_ClaimFreeMemory
2.12
400EF Wimp_CommandWindow
2.12
400F0 Wimp_TextColour
2.12
400F1 Wimp_TransferBlock
2.12
400F2 Wimp_ReadSysInfo
2.12
400F3 Wimp_SetFontColours
2.12
401C7 Sound_QInterface
2.12
40244 ADFS_Retries
2.12
40245 ADFS_DescribeDisc
2.12
40289 Podule_HardwareAddress
2.12
40540 FileCore_DiscOp
2.12
40541 FileCore_Create
2.12
40542 FileCore_Drives
2.12
40543 FileCore_FreeSpace
2.12
40544 FileCore_FloppyStructure
2.12
40545 FileCore_DescribeDisc
2.12
405C0 Shell_Create
2.12
405C1 Shell_Destroy
2.12
406C0 Hourglass_On
2.12
406C1 Hourglass_Off
2.12
406C2 Hourglass_Smash
2.12
406C3 Hourglass_Start
2.12
406C4 Hourglass_Percentage
2.12
406C5 Hourglass_LEDs
2.12
40700 Draw_ProcessPath
2.12
40701 Draw_ProcessPathFP
2.12
40702 Draw_Fill
2.12
40703 Draw_FillFP
2.12
40704 Draw_Stroke
2.12
40705 Draw_StrokeFP
2.12
40706 Draw_StrokePath
2.12
40707 Draw_StrokePathFP
2.12
40708 Draw_FlattenPath
2.12
40709 Draw_FlattenPathFP
2.12
4070A Draw_TransformPath
2.12
4070B Draw_TransformPathFP
2.12
40780 RamFS_DiscOp
2.12
40781 RamFS_NOP
2.12
40782 RamFS_Drives
2.12
40783 RamFS_FreeSpace
2.12
40784 RamFS_NOP
2.12
40785 RamFS_DescribeDisc
2.12
40740 ColourTrans_SelectTable
2.12
40741 ColourTrans_SelectGCOLTable
2.12
40742 ColourTrans_ReturnGCOL
2.12
40743 ColourTrans_SetGCOL
2.12
40744 ColourTrans_ReturnColourNumber
2.12
40745 ColourTrans_ReturnGCOLForMode
2.12
40746 ColourTrans_ReturnColourNumber
2.12
ForMode
2.12
40747 ColourTrans_ReturnOppGCOL
2.12
40748 ColourTrans_SetOppGCOL
2.12
40749 ColourTrans_ReturnOppColour
2.12
Number
2.12
4074A ColourTrans_ReturnOppGCOLFor
2.12
Mode
2.12
4074B ColourTrans_ReturnOppColour
2.12
NumberForMode
2.12
4074C ColourTrans_GCOLToColourNumber
2.12
4074D ColourTrans_ColourNumberToGCOL
2.12
4074E ColourTrans_ReturnFontColours
2.12
4074F ColourTrans_SetFontColours
2.12
40750 ColourTrans_InvalidateCache
2.12
• Starting up TinyDirs automatically via the Desktop initialisation
file − Archive 2.10 p 15, refers to the facility whereby the Desktop
can be caused to run a file of initialisation commands at start-up time.
One command that can be included in this file is a command to start up
TinyDirs and automatically install high-use directories or applications
on the icon bar.
2.12
TinyDirs accepts multiple arguments on the command, separated by blanks.
So, if you created two application directories for, say, the Basic
Editor and Twin, you could include the following command in the Desktop
startup file (assuming that the name of the disc where !TinyDirs,
!BasicEdit and !Twin all reside is “SysDisc”):
2.12
Run ADFS::SysDisc.$.!TinyDirs ADFS::SysDisc.$.!BasicEdit
ADFS::SysDisc.$.!Twin
2.12
Although two icons will be installed on the icon bar, only one copy of
the TinyDirs application is started up. If two separate commands had
been used:
2.12
Run ADFS::SysDisc.$.!TinyDirs ADFS::SysDisc.$.!BasicEdit
2.12
Run ADFS::SysDisc.$.!TinyDirs ADFS::SysDisc.$.!Twin
2.12
then, although the icon bar would look exactly the same, with the same
two icons installed, two copies of TinyDirs would have been started up,
using twice the memory.
2.12
It also seems safe to reduce the memory required by TinyDirs from 32k to
24k by altering the WimpSlot command in the !Run file for TinyDirs to
2.12
WimpSlot -min 24k -max 24k
2.12